我正试图在特定的比赛中获得特定比赛的结果。
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