How to remove the warning below in mysqli

The problem I have is that it is giving me a warning in mysqli stating this:

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

How can I get rid of the warning?


    $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();

OUTPUT OF 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 


you posted this in the databases forum, not the php forum, so all i can ask you is whether when you ran the sql right in mysql, i.e. outside of php, did it work or not?

Hi, basically any where you have a ? in your SQL you need to provide a bind variable. Even if this means duplicating something you already have. So the bind operation is expecting 2 entries and you are providing only 1. I think this should be done as follows:

$each = ‘%’ . $each . ‘%’;
$stmt->bind_param(‘ss’, $each, $each);