【问题标题】:problem with get url using php and mysql使用 php 和 mysql 获取 url 的问题
【发布时间】:2011-02-16 01:26:19
【问题描述】:

对不起,如果这个问题对某些人来说似乎很容易,但我似乎无法弄清楚。有人告诉我我可以来这里,因为这里的人非常乐于助人。我对以下代码有问题。当 uid 被调用到 example page.php?uid=5 的 url 时,如果我执行 page.php?uid=letters,我会得到“一些代码”,我会被重定向到 page.php?uid=1。效果很好。但是如果用户应该输入page.php?uid=1letters 我会收到此错误..'where 子句'中的未知列'1gh'

警告:mysql_fetch_array() 期望参数 1 是资源,布尔值在第 173 行的 C:\wamp\www\page.php 中给出。

如果用户在获取 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";

【问题讨论】:

  • 为什么在 $_GET 请求中使用 @ 符号?为什么不只是:$id = mysql_real_escape_string($_GET['uid']); 只是好奇...
  • 如果 'uid' 参数不在查询中,则尝试抑制错误/警告。

标签: php mysql mysql-error-1064


【解决方案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");

【讨论】:

  • 好的建议,但由于错误的查询(错误的部分很可能来自用户输入)而退出进程是处理错误的错误方法
  • 我不是在生产代码中建议...我建议了解它为什么失败。因此最后一行。将在答案中进一步澄清。
  • @Jacob 你仍然会得到一个好的答案的支持 ;-)。鉴于错误消息“boolean given”,我会说你是完全正确的。仅供参考,我的偏好是抛出异常。
  • 你的问题是你传入 $id 没有用单引号括起来,所以它认为 $id 是一个字段(如果它是一个字符串)。您应该更新您的问题以反映更改。
  • 谢谢你,jacob,我不敢相信我没有看到,为什么我这么说,因为我有一个类似的查询,我没有在该行收到错误,因为我已经放置了它在报价中。非常感谢
猜你喜欢
  • 2014-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
  • 2010-12-08
相关资源
最近更新 更多