对不起,如果这个问题对某些人来说似乎很容易,但我似乎无法弄明白。有人告诉我,我可以来这里,因为这里的人非常乐于助人。我遇到以下代码的问题。当uid被调用example page.php?uid=5
的网址时,如果我page.php?uid=letters
我获得了“某些代码”,我会被重定向到page.php?uid=1
。工作正常。但是如果用户应该输入page.php?uid=1letters
我会收到此错误。'where子句'中的未知列'1gh'
警告:mysql_fetch_array()要求参数1为资源,在第173行的C:\ wamp \ www \ page.php中给出布尔值。
如果用户在get url id的末尾输入了不需要的字符,我只会收到此错误。如何防止这种情况发生?如何将其重定向到page.php?uid=1
...请参阅下面的代码
$id = mysql_real_escape_string(@$_GET['uid']);
$query = mysql_query("SELECT user.* FROM user WHERE id = '$id'");
if ((mysql_num_rows($query)==0)) {
header("location:page.php?uid=1");
die();
}
else {
while($rows = mysql_fetch_array($query)){
$foo = $row['foo'];
echo "some code";
答案 0 :(得分:1)
mysql_query在出错时返回false。你应该检查它返回的内容:
$query = "SELECT user.* FROM user WHERE id = '$id'"
$result = mysql_query($query);
if ($result === false) {
die($query.'<br/>'.mysql_error());
}
然后你就可以理解为什么失败了。我已将查询添加到die()
语句中,因此您也可以手动尝试查询。
给出的错误是字符串的未知列,这表明您不会在SQL查询中用单引号括起该值,即使问题中的代码确实如此。
在生产中,您应该采取所有步骤,以确保正常处理错误。在这种情况下,您可能需要与未找到用户相同的行为:
header("location:page.php?uid=1");