Задать вопрос
@EvgenyApMr

Почему запрос возвращает ошибку 500?

Всех приветствую!

Формирую запрос внутри цикла следующим образом:

$request= NULL;
    foreach ($exampleO as $key => $value) {
        $request.= "INSERT INTO Words (word, example) SELECT '$key', '$value' WHERE NOT EXISTS ( SELECT word FROM Words WHERE word = '$key');";
}


Далее отправляю запрос на сервер:

if (mysqli_query($conn, $request)) {
        $result = "ok";
    }
    else {
        $result = "error";
    }


Всегда выдаёт ошибку.

При этом, если через СУБД, напрямую, отправить собранный запрос - все работает.

Например, отправляю на обработку несколько слов и получаю такое значение переменной $request


INSERT INTO Words (word, example) 
   SELECT 'Qneone', 'Qneone twotwo' 
     WHERE NOT EXISTS ( SELECT word FROM Words WHERE word = 'Qneone');
INSERT INTO Words (word, example) 
   SELECT 'Twotwo', 'Qneone twotwo ' 
     WHERE NOT EXISTS ( SELECT word FROM Words WHERE word = 'Twotwo');


Если этот запрос отправить через phpMyAdmin - отрабатывает отлично, но как только через mysqli_query($conn, $request) - ошибка.

Подскажите, где какой кавычки не хватает или в чем проблема?
  • Вопрос задан
  • 188 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Как только люди не извращаются, лишь бы SQL не изучать. А ведь достаточно сделать уникальный ключ по `word` и использовать запрос INSERT IGNORE.
Перед подключением к базе разрешить выброс исключений, вместо ручной проверки ошибок:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

В начале скрипта включить отображение ошибок PHP:
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);

Ну и использовать подготовленные выражения. Готовить один раз перед циклом, а в цикле только вызывать с разными значениями параметров.
Ответ написан
thewind
@thewind
php программист, front / backend developer
Вангую, что мульти запросы не разрешены. А phpmyadmin их просто парсит и делит на одиночные.

PS вы что-то слышали про sql инъекции?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы