2010-07-20 121 views
2

可能重复:
mysql_fetch_array() expects parameter 1 to be resource, boolean given in selectPHP和MySQL - 警告:mysqli_num_rows()预计参数1被mysqli_result,布尔给

我不知道如何可以纠正我keep0得到错误下面列出。

我收到以下错误消息。 159

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given on line 159 

线是

$foundnum = mysqli_num_rows($run); 

这里是PHP & MySQL的代码的一部分。

mysqli_select_db($mysqli, "sitename"); 

     $search_explode = explode(" ", $search); 

     foreach($search_explode as $search_each) { 
      $x++; 
      if($x == 1){ 
       $construct .= "(users_comments.article_content LIKE '%$search_each%' OR users_comments.title LIKE '%$search_each%' OR users_comments.summary LIKE '%$search_each%')"; 
      } else { 
       $construct .= "(OR users_comments.article_content LIKE '%$search_each%' OR users_comments.title LIKE '%$search_each%' OR users_comments.summary LIKE '%$search_each%')"; 
      } 

     } 

     $construct = "SELECT users.*, users_comments.* FROM users INNER JOIN users_comments ON users.user_id = users_comments.user_id WHERE $construct ORDER BY users_comments.date_created DESC"; 
     $run = mysqli_query($mysqli, $construct); 

     $foundnum = mysqli_num_rows($run); 

    if ($foundnum == 0) { 
     echo 'No results found.'; 
    } 
+1

您可能需要使用mysql_real_escape_string()这些$ search_each字符串在SQL语句中嵌入它们之前,如果尚未.. – 2010-07-20 18:32:13

回答

2

这是因为

if ($result = mysqli_query($mysqli, $construct)) { 
    // got something! 
    } 

返回FALSE。在将其用作结果集之前,您必须测试返回值。您的SQL语句中必须有错误。

小编建议:为了避免你的循环重复复杂的SQL字符串,使用$前缀的变量,就像这样:

$prefix = ''; 
foreach($search_explode as $search_each) { 
    $construct .= "$prefix (users_comments.article_content LIKE '%$search_each%' OR users_comments.title LIKE '%$search_each%' OR users_comments.summary LIKE '%$search_each%') "; 
    $prefix = ' OR' ; 
} 

我怀疑的错误是arount有反正,你把你的“或”内括号而不是外部。

+0

如何测试的返回值? – lone 2010-07-20 18:25:21

+0

请参阅我的评论中的修改 – 2010-07-20 18:29:51

3

您必须测试$run以确保mysqli_query()没有返回false。

if ($run != false) { 
    $foundnum = mysqli_num_rows($run); 
    if ($foundnum == 0) { 
    echo 'No results found.'; 
    } 
} 
相关问题