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

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

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

Доброго времени суток. Такая странная ситуация. Есть хранимая процедура
Листинг программы
  1. CREATE DEFINER=`root`@`localhost` PROCEDURE `reguser`(IN `login` VARCHAR(30) CHARSET utf8, IN `mail` VARCHAR(30) CHARSET utf8, IN `md5` VARCHAR(128) CHARSET utf8)
  2. NO SQL
  3. BEGIN
  4. INSERT INTO USER (login, mail, md5) VALUES(login,mail, md5);
  5. END
При вызове ее из phpmyadmin все нормально. а вот при вызове ее из php
Листинг программы
  1. public static function RegUser($link, $userLogin, $userMail, $userPassword){
  2. $md5 = md5($userPassword);
  3. return mysqli_query($link, "CALL reguser($userLogin, $userMail, $md5)") or die("Ошибка " . mysqli_error($link));
  4. }
вываливается такая ошибка.
Ошибка 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
Листинг программы
  1.         public static function RegUser($link, $userLogin, $userMail, $userPassword){
  2.             $md5 = md5($userPassword);
  3.             return mysqli_query($link, "CALL reguser('$userLogin', '$userMail', '$md5')") or die("Ошибка " . mysqli_error($link));
  4.         }

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

Код на языке 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут