使用near'?'order by的正确语法

oiopk7p5  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(229)

这个问题在这里已经有答案了

我可以参数化准备语句中的表名吗(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注入攻击?但我不知道如何解决这个错误。
我已经研究了使用接近“?”的正确语法,但我认为我的问题不同。

ltqd579y

ltqd579y1#

你没事。但是,数据库不支持将表名作为变量传递;请记住,查询规划器需要能够通过只查看参数化查询(而不查看参数)来准备语句(即生成其执行计划)。参数用于向查询传递文本值。
因此,您只能首先在应用程序中执行验证(针对固定的值列表,或通过查询) information_schema.tables ),然后连接查询中的表名:

$stmt = $connection->prepare("SELECT * FROM `$name` ORDER BY `score` DESC");
$stmt->bind_param("s", $name);
$stmt->execute();

相关问题