可能重复:
PHP PDO 语句可以接受表名作为参数吗?
我正在编写一个脚本,允许用户注册并登录到我的网站。我使用 PDO 准备和执行来防止 SQL 注入。
像这样手动构建查询确实有效:
$a_query = "SELECT COUNT(*) FROM ". $login_table . "
WHERE `username` = ". $my_username . "
AND `password = " . $my_hash ;
$result_1 = $db->prepare($a_query);
$result_1->execute();
但是当我尝试像这样正确使用准备时,它不会:
$a_query = "SELECT COUNT(*) FROM :table
WHERE `username` = :name
AND `password = :pass ;"
$result_1 = $db->prepare($a_query);
$result_1->bindParam(":table", $login_table);
$result_1->bindParam(":name", $my_username);
$result_1->bindParam(":pass", $my_hash);
$result_1->execute();
我从 $result_1->errorInfo[2] 收到的错误消息如下:
You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax
to use near ''customerlogin' WHERE `username` = 'guest' AND `password`
= 'qwerty' at line 1
如您所见,prepare() 在将查询发送到 mysql 之前神秘地切掉了查询的第一部分。
谁能向我解释为什么以及如何解决这个问题?