Ошибка, когда поисковые слова содержат специальные символы в php - PullRequest
0 голосов
/ 11 июня 2018

Я получаю фатальную ошибку PHP при поиске терминов со специальными символами (пример John O'Malley).Набор символов базы данных Mysql: utf8_unicode_ci

dbconn.php file

<?php
$DB_host = "removed";
$DB_user = "removed";
$DB_pass = "removed";
$DB_name = "removed";
    try
    {
        $DBcon = new PDO("mysql:host={$DB_host};dbname={$DB_name};charset=utf8",$DB_user,$DB_pass); 
        $DBcon->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch(PDOException $e)
    {
        echo "";
    }

php page

<?php
    $stmt = $DBcon->prepare("SELECT * FROM player WHERE player_name LIKE '%$Search%' LIMIT 25");
    $stmt->execute();
?>

Сообщение об ошибке, которое я получаю

Fatalошибка: необработанное исключение «PDOException» с сообщением «SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL есть ошибка;проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с 'Malley%' LIMIT 25 'в строке 1' в /../results.php:167 Трассировка стека: # 0 /../results.php(167): PDOStatement-> execute () # 1 {main} добавляется в /../results.php в строке 167

1 Ответ

0 голосов
/ 11 июня 2018

Вы на полпути.Подготовленные операторы позволят вам выполнить этот запрос, НО вы должны использовать их правильно.Чтобы использовать их правильно, вы должны параметризовать запрос.Все значения должны быть заполнителями в запросе, тогда они должны быть связаны.

Попробуйте:

$stmt = $DBcon->prepare("SELECT * FROM player WHERE player_name LIKE concat('%', ?, '%') LIMIT 25");
$stmt->execute(array($Search));
...