Ошибка после миграции с Mysql на MariaDb - PullRequest
0 голосов
/ 29 февраля 2020

У меня странная ошибка: у меня есть такой простой код:

$id = strip_tags($_SESSION["infos_profile_id"]);
$id_friend = strip_tags($_POST["update_user_chat_every_5_second"]);
$q = $bdd->query('SELECT * FROM message WHERE id_sender = '.$id_friend.' AND id_send_to = '.$id.' AND message_read = "0"');

Он отлично работает на mysql.

Но после размещения моего сайта на сервере mariadb, он видит, что ошибка.

PHP Неустранимая ошибка: необработанное исключение «PDOException» с сообщением «SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL имеется ошибка; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с 'И message_read = "0" в строке 1 в

Я сделал все, чтобы решить, но не могу найти, где на самом деле ошибка.

Любая помощь, чтобы решить эту ошибку?

Спасибо.

1 Ответ

0 голосов
/ 01 марта 2020

Я согласен с комментарием от @MaxT выше - вы должны повторить ваш запрос SQL после интерполяции всех переменных в него. Слишком сложно отлаживать, когда вы смотрите на код, который форматирует запрос SQL, а не на сам запрос.

Комментарии также верны, что strip_tags() бесполезен для SQL защиты от инъекций.

Параметры запроса - лучшая защита от внедрения SQL, они также помогают избежать синтаксических ошибок.

Вот как это будет выглядеть для вашего кода:

$id = $_SESSION["infos_profile_id"];
$id_friend = $_POST["update_user_chat_every_5_second"];
$sql = 'SELECT * FROM message WHERE id_sender = :id_friend AND id_send_to = :id AND message_read = 0';
$q = $bdd->prepare($sql);
$q->execute( ['id'=>$id, 'id_friend'=>$id_friend] );

Это действительно очень просто!

...