我想在我的sql查询中使用post变量值来按用户选择的顺序对数据进行排序。使用适当的字段正确显示表格,但不对值进行排序。
我知道这是受sql注入的,但是,我这样做是出于本地服务器上的培训目的。
<?php
$sort_in = $_POST['SortIn'];
$sql = 'select * from db.Runner order by "'.$_POST['SortIn'].'"';
$result = mysql_query($sql, $con);
if($result)
{
echo "<table border = '1'>
<tr>
<th>RunnerID</th>
<th>EventID</th>
</tr>";
while($row = mysql_fetch_array($result))
{
echo "<tr><td>";
echo $row['RunnerID'];
echo "</td><td>";
echo $row['EventID'];
echo "</td><td>";
</tr>";
}
echo "</table>";
?>
答案 0 :(得分:5)
您目前正在制作和运行类似
的查询select * from db.Runner order by "fieldname";
当然应该是
select * from db.Runner order by fieldname;
select * from db.Runner order by `fieldname`; -- for MySql
select * from db.Runner order by [fieldname]; -- for MSSQL
(我建议最后两个中的一个,具体取决于您的数据库,以防您的字段名称恰好是“订单”)。
删除双引号
$sql = 'select * from db.Runner order by '.$_POST['SortIn'];
并且可能用适当的分隔符替换它们,例如
$sql = 'select * from db.Runner order by `'. $_POST['SortIn'] . '`';
你已经提到了SQL注入和mysql_ vs mysqli_所以今天我会闭嘴;)虽然我没有看到理由 - 即使是localhost
的培训项目 - 也没有做对说实话。
[edit]发布此答案后,我们通过MarcB
向您的OP发送了一些有用的评论,并通过zan
向其他答案发表了一些有用的评论。尽管这是训练,但请注意他们,因为他们是好建议!
答案 1 :(得分:1)
您实际上对字符串而不是字段进行排序,删除查询中的引号:
$sql = 'select * from db.Runner order by '.$_POST['SortIn'];
P.S。我不会对注射开始咆哮;)