PHP/MYSQL - 使用准备好的语句删除数据库

Xor*_*Xor 3 php pdo drop-database

我想使用 PDO 删除数据库。

这种方法对我来说是最好的

function delete_db($database)
{
  $statement = $my_pdo_obj->prepare("DROP DATABASE IF EXISTS :database");
  $statement->bindParam(":database", $database);
  $statement->execute();
}
Run Code Online (Sandbox Code Playgroud)

但不幸的是,我收到了一个 PDOException,说我的绑定值 ($database) 附近存在语法错误:

致命错误:未捕获的异常 'PDOException' 带有消息 'SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在“?”附近使用的正确语法。在第 1' 行

所以我尝试按如下方式执行查询

function delete_db($database)
{
  $statement = $my_pdo_obj->exec("DROP DATABASE IF EXISTS " . $database);
}
Run Code Online (Sandbox Code Playgroud)

它有效。

我想知道为什么准备好的语句不起作用,以及第二个查询是否受到保护。

提前感谢您的想法!

Art*_*nko 5

您不能对表名、数据库名等使用绑定值。

http://php.net/manual/ru/pdo.prepare.php#111977