Хранимая процедура + PHP + @ = You have an error in your SQL syntax - MySQL

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Такая странная ситуация. Есть хранимая процедура
CREATE DEFINER=`root`@`localhost` PROCEDURE `reguser`(IN `login` VARCHAR(30) CHARSET utf8, IN `mail` VARCHAR(30) CHARSET utf8, IN `md5` VARCHAR(128) CHARSET utf8)
    NO SQL
BEGIN
    INSERT INTO USER (login, mail, md5) VALUES(login,mail, md5);
END
При вызове ее из phpmyadmin все нормально. а вот при вызове ее из php
        public static function RegUser($link, $userLogin, $userMail, $userPassword){
            $md5 = md5($userPassword);
            return mysqli_query($link, "CALL reguser($userLogin, $userMail, $md5)") or die("Ошибка " . mysqli_error($link));
        }
вываливается такая ошибка.
Ошибка You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '@mail.ru, 0e1cb7902c448585e751dfc492e80841)' at line 1
Мое предположение. Слышал такой термин как SQL инъекция и думаю что символ @ интерпретируется ни как значение переменной, а как ключевой символ языка SQL. Может есть какой способ экранирования подобных ситуация? Может причина в другом? И почему phpmyadmin эти данные проглатывает, а вызов из php ХП эти данные не проглатываются?

Решение задачи: «Хранимая процедура + PHP + @ = You have an error in your SQL syntax»

textual
Листинг программы
        public static function RegUser($link, $userLogin, $userMail, $userPassword){
            $md5 = md5($userPassword);
            return mysqli_query($link, "CALL reguser('$userLogin', '$userMail', '$md5')") or die("Ошибка " . mysqli_error($link));
        }

Объяснение кода листинга программы

Код на языке PHP выполняет хранимую процедуру с именем reguser в базе данных, используя библиотеку MySQLi.

  1. public static function RegUser($link, $userLogin, $userMail, $userPassword) - объявление функции с четырьмя позиционными параметрами: $link (соединение с базой данных), $userLogin (логин пользователя), $userMail (email пользователя), $userPassword (пароль пользователя).
  2. $md5 = md5($userPassword); - генерация хеша пароля с помощью функции md5.
  3. return mysqli_query($link,CALL reguser('$userLogin', '$userMail', '$md5')) - выполнение хранимой процедуры reguser с передачей значений параметров в скобках. Функция mysqli_query возвращает результат выполнения SQL-запроса или ошибки.
  4. or die(Ошибка . mysqli_error($link)); - обработка ошибок с помощью функции die, которая завершает выполнение скрипта и выводит сообщение об ошибке. Получается, что функция RegUser регистрирует пользователя в базе данных, используя хранимую процедуру reguser. Эта процедура должна быть предварительно создана в базе данных.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.357 из 5