搜索单词在php中包含特殊字符时出错

时间:2018-06-10 22:55:29

标签: php mysql pdo prepared-statement special-characters

在搜索带有特殊字符的术语时,我遇到致命的PHP错误(例如John O'Malley)。 Mysql数据库字符集是utf8_unicode_ci

dbconn.php文件

<?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页面

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

我收到错误消息

  

致命错误:带有消息'SQLSTATE [42000]的未捕获异常'PDOException':语法错误或访问冲突:1064 SQL语法中有错误;查看与MariaDB服务器版本对应的手册,以便在/../results.php:167的第1行'Malley%'LIMIT 25'附近使用正确的语法。堆栈跟踪:#0 /../results.php (167):PDOStatement-&gt;执行()#1 {main}在第167行的/../results.php中抛出

1 个答案:

答案 0 :(得分:1)

你已经到了一半。准备好的语句将允许您执行此查询但是您必须正确使用它们。要正确使用它们,您必须参数化查询。所有值都应该是查询中的占位符,然后它们应该被绑定。

尝试:

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