PHP - where子句等于从URL中获取的2个值没有显示任何结果?

时间:2013-08-28 14:28:45

标签: php sql url

我想在特定的比赛中获得特定比赛的结果。

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";

}
?>

2 个答案:

答案 0 :(得分:0)

作为起点,在为URL创建GET变量时,应该通过urlencode将它们转换为可以使用的空格。

进入此页面的脚本后,使用urldecode将编码后的字符替换为普通字符。 (可能不需要这个位 - 试试吧)

然后将它们传递给mysql_escape_string以使它们发挥得更好并降低SQL注入的可能性。

尝试将创建的$sql字符串回显到屏幕或日志,以便您可以看到完全正在尝试的内容。这有助于确保GET变量正确通过。此外,您可以尝试直接在MySQL会话中运行此SQL以检查您的SQL是否正确。

最后,停止使用mysql_函数 - 它们已被弃用。 mysqli_PDO是o

的方式

答案 1 :(得分:0)

您的第二个网址是不正确的,因为网址中的+会被解码为空格字符。您需要将+编码为%2B,因此它将被视为文字+,而不是空格字符。

由于它被修复为空格字符,因此您的查询字符串永远不会匹配,因为您将进行比较:

database:   ... Grade I, 3 yr old+, 8F ...
query   :   ... Grade I, 3 yr old , 8F ...
                                 ^---note the space