我正在做一个小的ajax问题结果系统。当用户在文本区域中键入内容时,会自动搜索并输出结果。
问题是每次用户键入包含"或"的问题时 - 搜索都不成功。有什么方法可以在字符串内的"或"中添加反斜杠,以便将其忽略?
或者是否有任何过滤器忽略"或"?
我需要用引号搜索问题,因为数据库中的问题包含它们。
代码如下:
$q = $_POST['q'];
// for every " or ' in $q add ' before it
$results = array();
$result = array();
$count = 0;
$stmt = $dbh->prepare("SELECT result FROM quest WHERE quest LIKE '".$q."%'");
if($stmt->execute()){
$result = $stmt->fetchAll(PDO::FETCH_OBJ);
$count= $stmt->rowCount();
}
if($result != NULL){
foreach($result as $part){
foreach($part as $item){
$results[] = $item;
}
}
echo htmlentities($results[0], ENT_QUOTES, "UTF-8");
}
您没有正确使用预准备语句,这就是您遇到此问题的原因。如果正确使用预准备语句,它们将为您解决此问题。这方面的文档实际上非常好。
http://php.net/manual/en/pdo.prepared-statements.php
编辑:请花时间学习如何正确使用它们。否则,您的代码容易受到 SQL 注入的影响。
尝试使用 addslashes() 函数