簡體   English   中英

PHP-where子句等於從URL獲取的2個值沒有顯示任何結果?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM