2012-06-19 57 views
2

我的问题是,它给我的mysqli说明这是一个警告:如何删除警告下面的mysqli

Warning: mysqli_stmt::bind_param() [mysqli-stmt.bind-param]: Number of variables doesn't match number of parameters in prepared statement in ...on line 89 

我怎样才能摆脱警告?

$questionquery = " 
SELECT q.QuestionId, q.QuestionContent, o.OptionType, q.NoofAnswers, GROUP_CONCAT(an.Answer ORDER BY an.Answer SEPARATOR ' ') AS Answer, r.ReplyType, 
     q.QuestionMarks 
    FROM Answer an 
    INNER JOIN Question q ON q.AnswerId = an.AnswerId 
    JOIN Reply r ON q.ReplyId = r.ReplyId 
    JOIN Option_Table o ON q.OptionId = o.OptionId 

       WHERE "; 

$i=0; 
foreach ($terms as $each) {  
    $i++;   

    if ($i == 1){   
     $questionquery .= "q.QuestionContent LIKE ? ";  
     } else {   
      $questionquery .= "OR q.QuestionContent LIKE ? ";  
      } 
      } 

      $questionquery .= "GROUP BY q.QuestionId, q.SessionId ORDER BY "; $i = 0; foreach ($terms as $each) {  
       $i++;  

    if ($i != 1)   
    $questionquery .= "+";  
    $questionquery .= "IF(q.QuestionContent LIKE ? ,1,0)"; 
    } 

    $questionquery .= " DESC "; 

    $stmt=$mysqli->prepare($questionquery);  
    $stmt->bind_param('s', $each = '%' . $each . '%'); 
    $stmt->execute(); 
    $stmt->bind_result($dbQuestionId,$dbQuestionContent,$dbOptionType,$dbNoofAnswers,$dbAnswer,$dbReplyType,$dbQuestionMarks); 
    $questionnum = $stmt->num_rows(); 

输出的SQL:

SELECT q.QuestionId, q.QuestionContent, o.OptionType, q.NoofAnswers, GROUP_CONCAT(an.Answer ORDER BY an.Answer SEPARATOR ' ') AS Answer, r.ReplyType, q.QuestionMarks 

FROM Answer an INNER JOIN Question q ON q.AnswerId = an.AnswerId JOIN Reply r ON q.ReplyId = r.ReplyId JOIN Option_Table o ON q.OptionId = o.OptionId 

WHERE q.QuestionContent LIKE ? 

GROUP BY q.QuestionId, q.SessionId 

ORDER BY IF(q.QuestionContent LIKE ? ,1,0) DESC 
+0

[严重的是,尝试全文检索](http://stackoverflow.com/questions/11106155/fatal-error-is-causing -no-results-to-appear-mysqli#comment14547138_11106155)这正是全文搜索的目的。 – Gumbo

+0

如果有人可以请求帮助,我仍然需要帮助 – user1394925

回答

1

你似乎混淆的MySQLi的参数绑定与PDO的(它接受一个数组​​呼吁$eachbind_param()没有参数传递到​​

方法。
$stmt->bind_param('s', $each); 
$stmt->execute(); 

请注意,如果您打算使用LIKE查询%个通配符,这些通配符必须是绑定变量的一部分,使得:

$each = '%' . $each . '%'; 
+0

嗨,我尝试了你的理论,但问题是它现在给我一个不同的警告。我已更新问题以显示新警告和更新代码。 – user1394925

+0

@ user1421767请在'$ questionQuery'中准备完整的sql语句。你需要在SQL中有最后绑定的''''和''''''', –

+0

完整的sql语句在我提供的代码中,但为了使可读性更容易我已经在问题底部提供了完整的sql语句 – user1394925