在mysql查询中发布变量

时间:2013-12-09 14:42:16

标签: php mysql

我想在我的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>";
?>

2 个答案:

答案 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。我不会对注射开始咆哮;)