这个问题在这里已经有答案了:
我可以参数化准备语句中的表名吗(2个答案)
php pdo语句可以接受表或列名作为参数吗(7个答案)
11个月前关门了。
$array = array();
$stmt = $connection->prepare("SELECT *
FROM ?
ORDER BY `score` DESC");
$stmt->bind_param("s", $name);
$stmt->execute();
$data = $stmt->get_result();
while($row = $data->fetch_assoc()){
array_push($array, $row);
}
未捕获的mysqli\u sql\u异常:您的sql语法有错误;检查与您的mariadb服务器版本相对应的手册,以获得使用near'的正确语法?按“score”“desc”在中的第2行排序。。。
target\ leadboard是我在这个php页面顶部包含的单独的“connection.php”文件中连接到的数据库。
我正在尝试使用“如何在php中防止sql注入”中描述的方法来防止sql注入攻击?但我不知道如何解决这个错误。
我已经研究了使用接近“?”的正确语法,但我认为我的问题不同。
1条答案
按热度按时间ltqd579y1#
你没事。但是,数据库不支持将表名作为变量传递;请记住,查询规划器需要能够通过只查看参数化查询(而不查看参数)来准备语句(即生成其执行计划)。参数用于向查询传递文本值。
因此,您只能首先在应用程序中执行验证(针对固定的值列表,或通过查询)
information_schema.tables
),然后连接查询中的表名: