Подготовленный оператор PDO в PHP: проблемы с MySQL LIKE-запросами
Класс PDO PHP с MySQL предлагает механизм выполнения операторов SQL с параметризованными запросами , улучшая безопасность и производительность. Однако пользователи могут столкнуться с трудностями при использовании запросов LIKE.
Проблема: подготовленный оператор PDO не возвращает результаты с помощью запроса LIKE.
При попытке выполнить запрос, аналогичный следующему используя PDO:
SELECT *
FROM hs
WHERE hs_text LIKE "%searchTerm%"
Пользователи могут обнаружить, что результаты не возвращаются.
Решение: правильная параметризация
Проблема заключается в неправильная параметризация поискового запроса. В PHP подготовленные операторы используют именованные заполнители, для которых требуется другой синтаксис. Правильная параметризация запроса LIKE:
$prep = $dbh->prepare($sql);
$ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));
Объяснение:
Подготовленные операторы отделяют данные от запроса и используют заполнители. Поэтому нет необходимости заключать поисковый запрос в двойные кавычки или выполнять конкатенацию строк.
Другие распространенные ошибки:
WHERE hs_text LIKE :searchTerm
$ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"')); // Incorrect
WHERE hs_text LIKE CONCAT(\'%\', ?, \'%\')
$ret = $prep->execute(array($searchTerm)); // Incorrect
Используя правильную параметризацию, вы можете успешно выполнять запросы LIKE, используя PDO подготовил операторы на PHP.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3