PDO准备语句不会按预期在MySQL中创建表



我已经花了1个多小时看代码,我不知道为什么它不起作用,我正在寻求建议,而不是扯掉我的头发。

我只是想写一个php脚本在MySQL中创建一些表。

下面的代码根本没有创建任何表。为什么呢?

//prepared statement to execute for table creation
$query = "CREATE TABLE IF NOT EXISTS :table (:columns)";
$stmt = $dbh->prepare($query);
$stmt->bindParam(":table", $table, PDO::PARAM_STR);
$stmt->bindParam(":columns", $columns, PDO::PARAM_STR);
//creating the members table
$table = "members";
$columns = "user VARCHAR(20), password VARCHAR(20), INDEX(user(5))";
try {
$stmt->execute();
} catch (Exception $ex) {
echo "Exception: ".$ex->getMessage(); }
/*
$sql = "CREATE TABLE IF NOT EXISTS $table ($columns)";
$dbh->query($sql);*/
echo "Table $table now in database ". DB_NAME. "<br>";

当我注释掉准备好的stmt并使用直接查询时,它工作并且创建了表,因此$dbh没有任何问题。

//prepared statement to execute for table creation
/* 
$query = "CREATE TABLE IF NOT EXISTS :table (:columns)";
$stmt = $dbh->prepare($query);
$stmt->bindParam(":table", $table, PDO::PARAM_STR);
$stmt->bindParam(":columns", $columns, PDO::PARAM_STR);
*/
//creating the members table
$table = "members";
$columns = "user VARCHAR(20), password VARCHAR(20), INDEX(user(5))";
/*
try {
$stmt->execute();
} catch (Exception $ex) {
echo "Exception: ".$ex->getMessage(); }
*/
$sql = "CREATE TABLE IF NOT EXISTS $table ($columns)";
$dbh->query($sql);
echo "Table $table now in database ". DB_NAME. "<br>";

From: The excellent https://phpdelusions.net/pdo#bindable

可以绑定的查询部分

了解哪些查询部分可以使用预处理语句绑定,哪些不能使用预处理语句绑定是非常重要的。事实上,该列表非常短:只能绑定字符串和数字字面值。因此,您可以看出,只要您的数据可以在查询中表示为数字或带引号的字符串字面值-它就可以被绑定。对于所有其他情况,您根本不能使用PDO预处理语句:标识符,逗号分隔的列表,引号字符串文本的一部分或任何其他任意查询部分都不能使用预处理语句绑定。

最常见用例的变通方法可以在本文的相应部分找到

最新更新