Хранимая процедура + PHP + @ = You have an error in your SQL syntax - MySQL
Формулировка задачи:
Доброго времени суток. Такая странная ситуация.
Есть хранимая процедура
При вызове ее из phpmyadmin все нормально.
а вот при вызове ее из php
вываливается такая ошибка.
Мое предположение. Слышал такой термин как SQL инъекция и думаю что символ @ интерпретируется ни как значение переменной, а как ключевой символ языка SQL. Может есть какой способ экранирования подобных ситуация? Может причина в другом? И почему phpmyadmin эти данные проглатывает, а вызов из php ХП эти данные не проглатываются?
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
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
Решение задачи: «Хранимая процедура + 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.
public static function RegUser($link, $userLogin, $userMail, $userPassword)
- объявление функции с четырьмя позиционными параметрами: $link (соединение с базой данных), $userLogin (логин пользователя), $userMail (email пользователя), $userPassword (пароль пользователя).$md5 = md5($userPassword);
- генерация хеша пароля с помощью функции md5.return mysqli_query($link,
CALL reguser('$userLogin', '$userMail', '$md5'))
- выполнение хранимой процедурыreguser
с передачей значений параметров в скобках. Функция mysqli_query возвращает результат выполнения SQL-запроса или ошибки.or die(
Ошибка. mysqli_error($link));
- обработка ошибок с помощью функции die, которая завершает выполнение скрипта и выводит сообщение об ошибке. Получается, что функция RegUser регистрирует пользователя в базе данных, используя хранимую процедуруreguser
. Эта процедура должна быть предварительно создана в базе данных.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д