我想在特定的比赛中获得特定比赛的结果。
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";
}
?>
答案 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