Uncaught PDOException: SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа

Я не знаю, почему я получаю ошибку

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;
    }
}

Вы неправильно используете подготовку, = $text"должно быть = ?", а затем execute([$text])

Nigel Ren 06.07.2019 18:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
9 117
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваше заявление о подготовке неверно. Вам нужно заменить переменную PHP заполнителем, а затем передать фактическое значение функции execute.

$cho = $pdo->prepare("SELECT id FROM choices WHERE `text` = ?");
$cho->execute([$text]);
$r = $cho->fetch(PDO::FETCH_ASSOC);

Спасибо @Dharman, теперь это работает. Но вы знаете, что в большинстве случаев такие проблемы работают без использования заполнителя, тогда почему это не работает?

dchhitarka 06.07.2019 18:44

В большинстве случаев он работает в 60% случаев. Возможно, вам повезет, это работает, но если вы сделаете это правильно, это сработает на 100%. Подготовленные операторы с заполнителями — правильный способ сделать это, а побочным эффектом является то, что они также защищают вас от SQL-инъекций.

Dharman 06.07.2019 18:45

Другие вопросы по теме