mysql - 使用变量时查询不起作用

时间:2017-01-01 19:43:00

标签: php mysql sql

我目前有一个如下所示的查询:

$sql = "SELECT * FROM Results ORDER BY '$SortBy' '$SortIn'";

$SortBy = $_POST['SortBy']; 
$SortIn = $_POST['SortIn'];

当我运行此查询时,我没有收到任何错误,它显示了所有相关数据,但是,它没有正确显示。

SortBy指的是表格字段(例如参考编号) SortIn指升序或降序。

如果我在不使用变量的情况下运行查询,例如:

$sql = "SELECT * FROM Results ORDER BY RefNo asc"

它工作正常并按预期对数据进行排序。您是否知道如何使用变量使其工作?我有一个表单,用户可以选择按照他们喜欢的方式对数据进行排序。

表单的代码:

<form action="#" method="post" id="displayTimeTable">
<table>
<tr>
<td>
Sort table on =
<select name="SortBy">
<option value="RefNo" selected="selected">Reference Number</option>
<option value="Date">Date</option>
<option value="Amount">Amount</option>
</select>
</td>
<td>
Sort in =
<select name="SortIn">
<option value="asc" selected="selected">Ascending order</option>
<option value="desc">Descending order</option>
</select>
</td>
</tr>
</table>
<p>
<input type="submit" name="submit" value="Submit"/>
</p>
</form>

建议更改后,我收到了以下错误:

  

警告:mysql_fetch_array()期望参数1是资源,   第37行给出的布尔值

下面是它所引用的代码(第37行是while语句):

$result = mysql_query($sql, $connection);
echo "<table>";
echo "<table border=1>";
echo "<TR><TH>Reference Number</TH><TH>Date</TH><TH>Amount</TH></TR>";
while ($row = mysql_fetch_array($result)) { 

    echo "<tr><td>"; 
    echo $row['RefNo']; 
    echo "</td><td>"; 
    echo $row['Date']; 
    echo "</td><td>";
    echo $row['Amount'];
    echo "</td></tr>";
} 

echo "</table>";

2 个答案:

答案 0 :(得分:1)

单引号表示字符串文字。由于您的变量包含列名和句法元素(例如ascdesc),因此您需要丢失引号:

$sql = "SELECT * FROM Results ORDER BY $SortBy $SortIn";
# Here --------------------------------^-----^-^-----^

答案 1 :(得分:0)

我已经解决了我的问题!对我来说非常愚蠢。我需要做的就是纠正布局,在此之前:

$sql = "SELECT * FROM Results ORDER BY $SortBy $SortIn";

$SortBy = $_POST['SortBy']; 
$SortIn = $_POST['SortIn'];

$SortBy = $_POST['SortBy'];$SortIn = $_POST['SortIn'];处于不正确的位置,需要先查询我的查询,而不是之后......所以我实际上是在调用ORDER BY BLANK BLANK

所以现在我的代码看起来像这样,并且完美无缺地运行:)

$SortBy = $_POST['SortBy']; 
$SortIn = $_POST['SortIn'];

$sql = "SELECT * FROM Results ORDER BY $SortBy $SortIn";