如何在请求中像参数一样发送数据库 table 名称并在服务器上的函数中处理它?
How to send database table name like a parameter in the request and handle it in the function on server?
我有自己的 API,一切都很好,但我需要帮助:
我使用了一个函数来获取其参数中的数据库 table 名称,并根据该名称插入数据。
例如:
function InsertData( $Employee,$userId,...) {
$query = INSERT INTO $Employee(...,...,...,...) VALUES (?,?,?,...)
}
function InsertData( $Passenger,$userId,...) {
$query = INSERT INTO $Passenger(...,...,...,...) VALUES (?,?,?,...)
}
public function createPost ($tablename,$userid,$content){
$postStatement = $this->con->prepare("INSERT INTO '.$tablename.'(userid,content) VALUES (?,?)");
$postStatement ->bind_param("is",$userid,$content);
if ($postStatement ->execute()){
return DONE;
}else{
return NOT_DONE;
}
它总是向我显示消息:内部服务器错误
在你的情况下,我会尝试为每个查询创建一个自定义方法。
- 确保 PDO 抛出异常:
$host = 'localhost';
$dbname = 'test';
$username = 'root';
$password = '';
$charset = 'utf8mb4';
$collate = 'utf8mb4_unicode_ci';
$dsn = "mysql:host=$host;dbname=$dbname;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_PERSISTENT => false,
PDO::ATTR_EMULATE_PREPARES => true,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES $charset COLLATE $collate"
];
$pdo = new PDO($dsn, $username, $password, $options);
然后为每个查询创建一个方法。示例:
public function insertPassenger(string $firstName, string $lastName): int
$row = [
'first_name' => $firstName,
'last_name' => $lastName,
];
$sql = "INSERT INTO passengers SET first_name=:first_name, last_name=:last_name;";
$this->pdo->prepare($sql)->execute($row);
return (int)$this->pdo->lastInsertId();
}
public function insertReservation(int flightId, $passengerId): int
$row = [
'flight_id' => $flightId,
'passenger_id' => $passengerId,
];
$sql = "INSERT INTO reservations SET flight_id=:flight_id, passenger_id=:passenger_id;";
$this->pdo->prepare($sql)->execute($row);
return (int)$this->pdo->lastInsertId();
}
我有自己的 API,一切都很好,但我需要帮助: 我使用了一个函数来获取其参数中的数据库 table 名称,并根据该名称插入数据。 例如:
function InsertData( $Employee,$userId,...) {
$query = INSERT INTO $Employee(...,...,...,...) VALUES (?,?,?,...)
}
function InsertData( $Passenger,$userId,...) {
$query = INSERT INTO $Passenger(...,...,...,...) VALUES (?,?,?,...)
}
public function createPost ($tablename,$userid,$content){
$postStatement = $this->con->prepare("INSERT INTO '.$tablename.'(userid,content) VALUES (?,?)");
$postStatement ->bind_param("is",$userid,$content);
if ($postStatement ->execute()){
return DONE;
}else{
return NOT_DONE;
}
它总是向我显示消息:内部服务器错误
在你的情况下,我会尝试为每个查询创建一个自定义方法。
- 确保 PDO 抛出异常:
$host = 'localhost';
$dbname = 'test';
$username = 'root';
$password = '';
$charset = 'utf8mb4';
$collate = 'utf8mb4_unicode_ci';
$dsn = "mysql:host=$host;dbname=$dbname;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_PERSISTENT => false,
PDO::ATTR_EMULATE_PREPARES => true,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES $charset COLLATE $collate"
];
$pdo = new PDO($dsn, $username, $password, $options);
然后为每个查询创建一个方法。示例:
public function insertPassenger(string $firstName, string $lastName): int
$row = [
'first_name' => $firstName,
'last_name' => $lastName,
];
$sql = "INSERT INTO passengers SET first_name=:first_name, last_name=:last_name;";
$this->pdo->prepare($sql)->execute($row);
return (int)$this->pdo->lastInsertId();
}
public function insertReservation(int flightId, $passengerId): int
$row = [
'flight_id' => $flightId,
'passenger_id' => $passengerId,
];
$sql = "INSERT INTO reservations SET flight_id=:flight_id, passenger_id=:passenger_id;";
$this->pdo->prepare($sql)->execute($row);
return (int)$this->pdo->lastInsertId();
}