在搜索带有特殊字符的术语时,我遇到致命的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中抛出
答案 0 :(得分:1)
你已经到了一半。准备好的语句将允许您执行此查询但是您必须正确使用它们。要正确使用它们,您必须参数化查询。所有值都应该是查询中的占位符,然后它们应该被绑定。
尝试:
$stmt = $DBcon->prepare("SELECT * FROM player WHERE player_name LIKE concat('%', ?, '%') LIMIT 25");
$stmt->execute(array($Search));