0

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 %%ますが、クエリで正しく使用しているかどうかはわかりません。このエラーを取り除く方法と、なぜ発生したのかを知っていただければ幸いです。

4

2 に答える 2

4
  • 使用CONCAT()機能
  • 列名に一重引用符の代わりにバッククォートを使用します(ただし、この場合、列名が予約済みのキーワードではないか、無効な文字が含まれていないため、必要ありません)

クエリ、

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

もう1つ、クエリは脆弱です。SQL Injection以下の記事をお読みください。

于 2012-11-08T07:08:52.927 に答える
1
why it happened?

結果セットを返すforSELECT, 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 . "%'");
于 2012-11-08T07:23:36.657 に答える