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

6ie5vjzr  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(431)

我在搜索带有特殊字符的术语时遇到了一个致命的php错误(例如 John O'Malley ). mysql数据库字符集是utf8\u unicode\u 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();
?>

收到错误消息
致命错误:未捕获异常“pdoexception”,消息为“sqlstate[42000]:语法错误或访问冲突:1064您的sql语法有错误;检查与您的mariadb服务器版本相对应的手册,以了解在/./results中第1行的'malley%'limit 25'附近使用的正确语法。php:167 stack trace:#0/./results.php(167):pdostatement->execute()#1{main}在第167行的/./results.php中抛出

8zzbczxx

8zzbczxx1#

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

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

相关问题