4

我想使用 PDO 删除数据库。

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

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

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

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

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

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

它有效。

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

提前感谢您的想法!

4

2 回答 2

5

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

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

于 2017-01-02T17:17:48.217 回答
0

据我所知,PDO 只接受列名的绑定。

也许这个问题对你有帮助!

PHP PDO 语句可以接受表名或列名作为参数吗?

于 2017-01-02T17:16:27.403 回答