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

时间:2017-01-02 17:14:16

标签: 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();
}

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

  

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

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

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

它有效。

我想知道为什么准备好的声明不起作用,如果第二个查询是安全的话。

提前感谢您的想法!

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

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

也许这个问题可以帮到你!

Can PHP PDO Statements accept the table or column name as parameter?