I am getting quite a few errors when trying to create a dynamic where clause using mysqli:\[quote\] Warning: Parameter 2 to mysqli_stmt::bind_param() expected to be a reference, value given in ... on line 319 Warning: mysqli_stmt::execute(): (HY000/2031): No data supplied for parameters in prepared statement in ... on line 328 Warning: mysqli_stmt::bind_result(): (HY000/2031): No data supplied for parameters in prepared statement in ... on line 331 Warning: mysqli_stmt::store_result(): (HY000/2014): Commands out of sync; you can't run this command now in ... on line 332\[/quote\]Im guessing there is a little change that is needed to solve the problems but what happens is that if one of the two drop down menu's do not equal \[code\]All\[/code\] or if both don't equal \[code\]All\[/code\] then it comes up with the errors.Below is the code display both the drop down menus and the query (with dynamic where clause) that follows depending n options selected:HTML:Student Drop down menu:\[code\]<select name="student" id="studentsDrop"><option value="http://stackoverflow.com/questions/14597752/All">All</option><option value="http://stackoverflow.com/questions/14597752/11">John May</option><option value="http://stackoverflow.com/questions/14597752/23">Chris Park</option></select>\[/code\]Question Number Drop down menu\[code\]<select name="question" id="questionsDrop"><option value="http://stackoverflow.com/questions/14597752/All">All</option><option value="http://stackoverflow.com/questions/14597752/123">1</option><option value="http://stackoverflow.com/questions/14597752/124">2</option><option value="http://stackoverflow.com/questions/14597752/125">3</option></select>\[/code\]PHP/MYSQLI:\[code\] function StudentAnswers() {/*BELOW IS THE QUERY WHERE I AM TRYING TO RETRIEVE DATA DEPENDING ON THE ASSESSMENT CHOSEN ANDTHEN DEPENDING ON OPTIONS CHOSEN IN STUDENT AND QUESTION NUMBER DROP DOWN MENU */ $selectedstudentanswerqry = " SELECT StudentAlias, StudentForename, StudentSurname, q.SessionId, QuestionNo, QuestionContent, ptionType, q.NoofAnswers, GROUP_CONCAT( DISTINCT Answer ORDER BY Answer SEPARATOR ',' ) AS Answer, r.ReplyType, QuestionMarks, GROUP_CONCAT(DISTINCT StudentAnswer ORDER BY StudentAnswer SEPARATOR ',') AS StudentAnswer, ResponseTime, MouseClick, StudentMark FROM Student s INNER JOIN Student_Answer sa ON (s.StudentId = sa.StudentId) INNER JOIN Student_Response sr ON (sa.StudentId = sr.StudentId) INNER JOIN Question q ON (sa.QuestionId = q.QuestionId) INNER JOIN Answer an ON q.QuestionId = an.QuestionId LEFT JOIN Reply r ON q.ReplyId = r.ReplyId LEFT JOIN Option_Table o ON q.OptionId = ptionId "; // Initially empty $where = array('q.SessionId = ?'); $parameters = array($_POST["session"]); $parameterTypes = 'i'; // Check whether a specific student was selected if($_POST["student"] !== 'All') { $where[] = 'sa.StudentId = ?'; $parameters[] = $_POST["student"]; $parameterTypes .= 'i'; } // Check whether a specific question was selected // NB: This is not an else if! if($_POST["question"] !== 'All') { $where[] = 'q.QuestionId = ?'; $parameters[] = $_POST["question"]; $parameterTypes .= 'i'; } // If we added to $where in any of the conditionals, we need a WHERE clause in // our query if(!empty($where)) { $selectedstudentanswerqry .= ' WHERE ' . implode(' AND ', $where); global $mysqli; $selectedstudentanswerstmt=$mysqli->prepare($selectedstudentanswerqry); // You only need to call bind_param once call_user_func_array(array($selectedstudentanswerstmt, 'bind_param'), array_merge(array($parameterTypes), $parameters)); //LINE 319 ERROR 1 }//Add group by and order by clause to query $selectedstudentanswerqry .= " GROUP BY sa.StudentId, q.QuestionId ORDER BY StudentAlias, q.SessionId, QuestionNo "; // get result and assign variables (prefix with db) $selectedstudentanswerstmt->execute(); //LINE 328 ERROR 2//bind database fields $selectedstudentanswerstmt->bind_result($detailsStudentAlias,$detailsStudentForename,$detailsStudentSurname,$detailsSessionId,$detailsQuestionNo, $detailsQuestonContent,$detailsOptionType,$detailsNoofAnswers,$detailsAnswer,$detailsReplyType,$detailsQuestionMarks,$detailsStudentAnswer,$detailsResponseTime, $detailsMouseClick,$detailsStudentMark); //LINE 331 ERROR 3//store results retrieved $selectedstudentanswerstmt->store_result(); //LINE 332 ERROR 4//count number of rows retrieved $selectedstudentanswernum = $selectedstudentanswerstmt->num_rows(); //output query echo "$selectedstudentanswerqry"; } ?>\[/code\]Here is a DEMO: DEMOIn demo select an assessment from drop down menu and submit. You will see the two drop down menus. Keep them both set as \[code\]All\[/code\] and submit, it will output query with no problems. No in one of the drop down menus, change \[code\]All\[/code\] to a specific student or question, then submit. Now you will see the errorsVAR DUMP:The result of the \[code\]var_dump(array_merge(array($parameterTypes), $parameters)));\[/code\] when I chose session (assessment) with value \[code\]31\[/code\], student number value \[code\]40\[/code\], and question number value \[code\]81\[/code\], AND WHERE CLAUSE \[code\]WHERE q.SessionId = ? AND sa.StudentId = ? AND q.QuestionId = ?\[/code\]:I am getting this output: \[code\]array(4) { [0]=> string(3) "iii" [1]=> string(2) "31" [2]=> string(2) "40" [3]=> string(2) "81" }\[/code\]