猿问

使用预处理语句时如何绑定带有空格的参数?

一个简单的数据表:

我想用预处理方式将数据表以数量num倒序排列:

<?php 
header('content-type:text/html;charset:utf-8');
$mysqli = new mysqli('localhost', 'root', '', 'info');
$stmt = $mysqli->prepare("SELECT * FROM test ORDER BY ?");
$dst = 'num desc';
$stmt->bind_param('s', $dst);
$stmt->execute();
$result = $stmt->get_result();
$str = '<table width="50%" border="1" cellspacing="0" cellpadding="0">';
$str .= '<tr><th>id</th><th>名称</th><th>数量</th><th>价格</th></tr>';
while ($row = $result->fetch_assoc()) {
    $str .= '<tr align="center"><td>'.$row['id'].'</td><td>'.$row['name'].'</td><td>'.$row['num'].'</td><td>'.$row['price'].'</td></tr>';
}
$str .='</table>';
echo $str;
$stmt->close();
$mysqli->close();
?>

但是不起作用:
https://img2.mukewang.com/5c8f5654000122c805400206.jpg

数据库上没问题:
https://img.mukewang.com/5c8f56550001e4c803610213.jpg

另外无法以"SELECT * FROM test ORDER BY ? ?"的形式进行预处理,会报错。
求大佬帮忙看下怎么解决这个问题?

慕神8447489
浏览 461回答 1
1回答

慕桂英546537

预处理 处理的是参数,是把?替换成相应的安全字符串,order 的参数是字段名,不是字符串。这儿应该判断一下字段名,然后直接拼 sql.你的 sql 是 order by "num", 不是 order by num
随时随地看视频慕课网APP
我要回答