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