【发布时间】:2015-05-27 10:50:53
【问题描述】:
我有一个用于从 MySQL 数据库中删除记录的 PHP 小脚本,它返回 SQLSTATE[42000]。
include("connectDB.php");
$recordID = $_POST["ID"];
$table = $_POST["table"];
$URL = $_POST["URL"];
$deleteRecordQuery = "DELETE FROM :table WHERE ID=:ID";
$deleteRecord = $conn->prepare($deleteRecordQuery);
$deleteRecord->bindParam(':table',$table);
$deleteRecord->bindParam(':ID',$recordID);
$deleteRecord->execute();
header("Location: ".$URL);
如果我注释掉:table参数的绑定,脚本就可以工作,并在语句中直接使用$table变量:
$deleteRecordQuery = "DELETE FROM $table WHERE ID=:ID";
所以 ID 绑定有效。为什么绑定表格不起作用?
返回信息是:
SQLSTATE[42000]:语法错误或访问冲突:1064 你有一个 SQL 语法错误;检查与您对应的手册 MySQL 服务器版本,用于在“Osobe”附近使用正确的语法 WHERE ID='1'' 在第 1 行
【问题讨论】:
-
您只能绑定值,不能绑定标识符。您需要一个白名单来验证表名,然后将其直接注入到查询中。