Я несколько раз царапаю голову над этим кодом … Не имеет смысла, почему это не работает
$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);
Это немного опечатка.