使用LIKE我的查询的Mysql_fetch_assoc()警告

时间:2012-11-08 07:05:48

标签: php mysql

当我返回查询时出现此错误mysql_fetch_assoc() expects parameter 1 to be resource, boolean given

$query = mysql_query("SELECT * FROM tempusers
    WHERE 'firstname' LIKE '%$data%' 
    OR 'lastname' LIKE '%$data%'
    OR 'description' LIKE '%$data%'
    OR 'title' LIKE '%$data%'");

if (! $query){
    echo'Database error: ' . mysql_error();
}
while($row=mysql_fetch_assoc($query)){
    $description = $row['description'];
    echo $description;
}

具体来说,是while循环。不明白我为什么会这样。我想这是因为我使用了LIKE,我不确定我是否正确使用wildcard's %%查询。我很高兴知道如何摆脱这个错误以及它为什么会发生

2 个答案:

答案 0 :(得分:4)

  • 使用CONCAT()功能
  • 在列名称上使用反引号而不是单引号(,但在这种情况下,由于您的列名不是reserved keyword或者不包含无效字符,因此不需要它)

查询,

SELECT * FROM tempusers
WHERE  `firstname` LIKE CONCAT('%', '$data', '%')
    OR `lastname` LIKE CONCAT('%', '$data', '%')
    OR `description` LIKE CONCAT('%', '$data', '%')
    OR `title` LIKE CONCAT('%', '$data', '%')

还有一件事,您的查询容易被SQL Injection攻击,请花时间阅读以下文章,

答案 1 :(得分:1)

why it happened?

对于返回结果集的SELECT, SHOW, DESCRIBE, EXPLAIN和其他语句,mysql_query()会在成功时返回资源,或在出现错误时返回FALSE 同样对于mysql_fetch_assoc(),参数必须是适当的资源,而不是像FALSE这样的对象。

How to rid of this error? 

由于错误是由于您的查询的执行返回FALSE,因此这可能是解决方法。

$query = mysql_query("SELECT * FROM `tempusers`
        WHERE `firstname` LIKE '%" . $data . "%'
        OR `lastname` LIKE '%" . $data . "%'
        OR `description` LIKE '%" . $data . "%'
        OR `title` LIKE '%" . $data . "%'");