с использованием bindParam с PDO

Я несколько раз царапаю голову над этим кодом … Не имеет смысла, почему это не работает

$isCorrect =($question->correct_answer == $body->answer) ? 1:0; // the values are all there....... // echo $body->question . "\n"; //335 // echo $body->user . "\n"; //51324123 // echo $question->day . "\n"; //0 // echo $isCorrect . "\n"; //0 //but still the below part fails. $db = getConnection(); $sql = "INSERT INTO `answers` (`id`, `question_id`, `user`, `day`, `is_correct`) VALUES (NULL, ':question', ':user', ':day', :is_correct)"; $stmt = $db->prepare($sql); $stmt->bindParam(":question_id", $body->question); $stmt->bindParam(":user", $body->user); $stmt->bindParam(":day", $question->day, PDO::PARAM_INT); $stmt->bindParam(":is_correct", $isCorrect, PDO::PARAM_INT); $stmt->execute(); 

дает эту ошибку:

 SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens 

Я подсчитываю 4 жетона … чего я не хватает? Очевидно, я делаю что-то неправильно.

изменение :

 $stmt->bindParam(":question_id", $body->question); 

чтобы:

 $stmt->bindParam(":question", $body->question); 

У вас есть запрос в :question но связанный с неправильным ключом ( :question_id ).

Попробуйте вот так:

 $sql = "INSERT INTO `answers` (`id`, `question_id`, `user`, `day`, `is_correct`) VALUES --The :variable shouldn't be surrounded by ''-- (NULL, :question, :user, :day, :is_correct)"; $stmt = $db->prepare($sql); //The values used in $sql should be the same here, so not :question_id but :question $stmt->bindParam(":question", $body->question); $stmt->bindParam(":user", $body->user); $stmt->bindParam(":day", $question->day, PDO::PARAM_INT); $stmt->bindParam(":is_correct", $isCorrect, PDO::PARAM_INT); 

просто не используйте bindParam с PDO
а также именованные параметры. это сэкономит массу головных болей

 $db = getConnection(); $sql = "INSERT INTO `answers` VALUES (NULL, ?,?,?,?)"; $data = [$body->question,$body->user,$question->day,$isCorrect]; $stmt = $db->prepare($sql)->execute($data); 
 $stmt->bindParam(":question_id", $body->question); 

должно быть

 $stmt->bindParam(":question", $body->question); 

Это немного опечатка.