@scotch18
Middle PHP Developer

Почему один и тот же запрос через консоль работает, а через php нет?

У меня один и тот же запрос работает через консоль и при попытке воспроизвести его через php - не работает выдает ошибку что есть синтаксическая ошибка в первой строке:

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 'DELIMITER //
DROP PROCEDURE IF EXISTS addColumn //
CREATE PROCEDURE addColumn(' at line 1

Уже экранировать пытался через mysqli_real_escape_string - результата 0, возможно проблема может быть в чем-то другом?

Строится запрос таким образом:
public function createQuery($array, $table){
        $query ="
DELIMITER //
DROP PROCEDURE IF EXISTS addColumn //
CREATE PROCEDURE addColumn()
BEGIN";

        foreach($array as $key => $value){
            $query .= "
IF NOT EXISTS (
      SELECT *
      FROM information_schema.COLUMNS
      WHERE COLUMN_NAME = '" . $key ."'
      AND TABLE_NAME = '". $table ."'
      AND TABLE_SCHEMA = DATABASE()
      ) THEN
      ALTER TABLE `".$table."`
    ADD COLUMN `" . $key ."` TEXT NULL DEFAULT null;
 END IF;";
        }
        $query .= "
END//
DELIMITER ;
CALL addColumn;
DROP PROCEDURE addColumn;";

        return $query;
    }


Отправляется так:
public static function uploadAny($query){
        $connect = self::createConnection();

        if ($connect !== false)
        {
            $result = mysqli_query(
                $connect, $query);

            echo mysqli_error($connect);

        }

    }
  • Вопрос задан
  • 151 просмотр
Решения вопроса 1
dyuriev
@dyuriev
A posteriori
DELIMITER не является командой сервера MySQL, это команда консоли MySQL.

Грубо говоря она указывает клиенту когда отправлять запрос, а не серверу как его интерпретировать.

Я возможно не проснулся еще, но вообще не понял зачем вы его используете. Есть же mysqli::multi_query
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@liz4rd
Возможно начать строку запроса нужно непосредственно с запроса а не с перехода на новую строчку, попробуйте: $query ="DELIMITER //...
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы