MySQL Query使用$ _GET

时间:2011-02-17 21:58:04

标签: php mysql

好吧,也许我有点过度,但我不明白为什么这不起作用!我的网站上有一个评论框,其中包含发布帖子的个人资料。我想在个人资料中显示他们的帖子。他们的个人资料页面是userinfo.php?user =(whatever)

此查询失败:

$query = "SELECT message,`date`,ip,name,website,id 
          FROM `guestbook_message`
          WHERE name=" . intval($_GET['user']) . "
          AND deleted=0
          ORDER BY `date` DESC";

4 个答案:

答案 0 :(得分:5)

您将获取用户的名称并将其直接转换为整数,然后将其与名称进行比较。这没有意义。

如果$_GET['user']是用户的ID,则将其与ID进行比较,而不是与name进行比较。

如果$ _GET ['user']是用户的用户名,那么你必须在用户名值周围加上引号。由于UserName值是一个字符串,您需要将其封装在引号中并删除intval。这样做:

 $query = "SELECT message,`date`,ip,name,website,id
           FROM `guestbook_message`
           WHERE name='" . mysql_real_escape_string($_GET['user']) . "'
               AND deleted=0
           ORDER BY `date` DESC";

答案 1 :(得分:2)

试试这个:

$name = intval($_GET['user']);

$query = "SELECT message,date,ip,name,website,id 
          FROM guestbook_message 
          WHERE name='" .$name. "' 
          AND deleted=0 
          ORDER BY date DESC";
$result = mysql_query($query) or die(mysql_error());

答案 2 :(得分:0)

假设您正在使用mysql_query()执行查询,请检查查询是否成功?

$query = "SELECT ...";
$result = mysql_query($query) or die(mysql_error());

如果查询失败,执行此操作将强制脚本中止,并告诉您查询失败的原因。

答案 3 :(得分:0)

有一点需要注意,在查询中直接使用$ _GET会让您对SQL注入攻击开放。

在构建SQL语句之前考虑清理输入,或使用PDO / Prepared语句。