0

我正在尝试在特定比赛中获得特定比赛的结果。

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 无法工作,而另一个 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";

}
?>
4

2 回答 2

0

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

在此页面上的脚本中,用于urldecode将编码字符替换为正常字符。(可能不需要这个位 - 试试看)

然后将它们通过mysql_escape_string,让它们玩得很好,并降低 SQL 注入的机会。

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

最后,停止使用mysql_函数——它们已被弃用。mysqli_或者PDO是方法

于 2013-08-28T14:41:18.110 回答
0

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

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

database:   ... Grade I, 3 yr old+, 8F ...
query   :   ... Grade I, 3 yr old , 8F ...
                                 ^---note the space
于 2013-08-28T14:41:32.173 回答