我正在尝试以我认为正确的方式绑定参数,但是我从MySQL得到了1064错误,这表明涉及的引用太多了。编写的代码如下所示:
$db_host = 'localhost';
$db_username = 'root';
$db_password = 'Password123';
$db_database = 'db_test';
$dbh = new PDO("mysql:host=$db_host", $db_username, $db_password);
$stmt = $dbh->prepare("DROP DATABASE :db_database;");
$stmt->bindParam(':db_database', $db_database, PDO::PARAM_STR, 7);
$stmt->execute() or exit(print_r($stmt->errorInfo(), true));
并显示错误消息:
数组([0] => 42000 [1] => 1064 [2] =>您的SQL中有错误 句法;查看与MySQL服务器版本对应的手册 在第1行''db_test''附近使用正确的语法
当我以错误的方式插入变量$db_database
时,它工作正常,即直接插入sql语法。此外,我已经检查过magic_quotes是否已关闭,如果这对它有任何影响。现在我被卡住了,因为感觉我做的事情正确(但显然我没有)。任何人都可以看到错误吗?
答案 0 :(得分:3)
PREPARE
这个(设置$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
)->prepare()
之前的查询中。答案 1 :(得分:1)
尝试以下方法:
$dbh->query("DROP TABLE `{$db_database}`");
在使用表而不是数据库时,您应该坚持使用prepare / execute。此外,在发出多个类似查询时,您只会看到准备和执行时的性能提升。引用From the PHP Manpage:
对于需要多次发出的查询,您会意识到 如果使用准备PDOStatement对象,性能会更好 PDO :: prepare()并发出多次调用的语句 PDOStatement对象::执行()。