[英]PHP - where clause equals 2 values grabbed from URL is not showing any results?
我正在嘗試在特定的比賽中獲得特定比賽的結果。
raceresult.php?meet=<i>August Meet</i>&race=<i>Allowance Fillies 2yo</i>
從第一個查詢中會看到見面會和比賽,並且會顯示一些結果。 例如:
這一項工作
raceresult.php?meet=meet=2013 OJCR Australian Derby&race=Allowance - 9f on turf 3yo
不起作用
raceresult.php?meet=2009 Gulfstream Park Grand Opening Meet&race=Flying Stakes - Grade I, 3 yr old+, 8F on dirt
在第二個示例中,是否有任何字符導致錯誤? 我可以很輕松地解決該問題,但是我不確定是什么原因使該URL無法正常工作,而另一個則效果很好。
我的代碼如下。
<?php
$sql = "SELECT * FROM racing WHERE `meet` = '$meet' LIMIT 1";
$query = mysql_query($sql) or die( mysql_error() . "<br />" . $sql );
while($row = mysql_fetch_array($query)){
$date= $row['date'];
echo "<h2><strong>$meet</strong> ($date)</h2>";
echo "<b>$race</b><br>";
}
?>
<?php
$sql = "SELECT * FROM racing WHERE `meet`='$meet' and `race`='$race' ORDER BY place";
$query = mysql_query($sql) or die( mysql_error() . "<br />" . $sql );
while($row = mysql_fetch_array($query)){
$place= $row['place'];
$horse= $row['horse'];
$farm= $row['farm'];
echo"$place. $horse owned by $farm";
}
?>
首先,在為URL創建GET變量時,應將它們通過urlencode
傳遞,以將空格轉換為可以使用的空格。
進入此頁面上的腳本后,使用urldecode
將編碼的字符替換為它們的普通字符。 (可能不需要此位-試試看)
然后通過mysql_escape_string
將它們傳遞給它們,以使它們發揮作用並降低SQL注入的機會。
嘗試將創建的$sql
字符串回顯到屏幕或日志中,以便您可以確切地看到正在嘗試的操作。 這將有助於確保GET變量正確傳遞。 另外,您可以嘗試直接在MySQL會話中運行此SQL,以檢查您的SQL是否正確。
最后,停止使用mysql_
函數-已過時。 mysqli_
或PDO
是實現
您的第二個URL可能不正確,因為URL中的+
被解碼為空格字符。 您需要將+
編碼為%2B
,因此它將被視為文字+
,而不是空格字符。
由於它被改成空格字符,因此您的查詢字符串將永遠不會匹配,因為您將進行比較:
database: ... Grade I, 3 yr old+, 8F ...
query : ... Grade I, 3 yr old , 8F ...
^---note the space
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.