Я не знаю, почему я получаю ошибку
Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Preprocessor' at line 1 in /var/www/html/phpquiz/result.php:17
Ошибка возникает при выполнении подготовленного оператора, т.е. при выполнении
$cho->execute();
<?php
session_start();
if (!isset($_SESSION['score'])){
$_SESSION['score'] = 0;
}
if (isset($_POST['submit'])){
$arr = array("a", "b", "c", "d", "e");
for($i = 1; $i < 6; $i++){
$text = $_POST['que_'.$arr[$i-1]];
echo "$text<br> ";
$cho = $pdo->prepare("SELECT id from choices where `text` = $text");
$cho->execute();
$r = $cho->fetch(PDO::FETCH_ASSOC);
echo $r;
}
}






Ваше заявление о подготовке неверно. Вам нужно заменить переменную PHP заполнителем, а затем передать фактическое значение функции execute.
$cho = $pdo->prepare("SELECT id FROM choices WHERE `text` = ?");
$cho->execute([$text]);
$r = $cho->fetch(PDO::FETCH_ASSOC);
Спасибо @Dharman, теперь это работает. Но вы знаете, что в большинстве случаев такие проблемы работают без использования заполнителя, тогда почему это не работает?
В большинстве случаев он работает в 60% случаев. Возможно, вам повезет, это работает, но если вы сделаете это правильно, это сработает на 100%. Подготовленные операторы с заполнителями — правильный способ сделать это, а побочным эффектом является то, что они также защищают вас от SQL-инъекций.
Вы неправильно используете подготовку,
= $text"должно быть= ?", а затемexecute([$text])