网站开发:使用 LIKE 从数据库查询时,SQL 查询仅返回区分大小写的值


<?php 
$searchErr="";
function test_input($data) {
$data = trim($data); //whitespacess
$data = stripslashes($data); //removes backslashes n clean data from database or form
$data = htmlspecialchars($data); //converts predefined characters to html entities, encoding user input so that they cannot manipulate html codes
return $data;
}
if ($_SERVER["REQUEST_METHOD"]=="POST")
{
if(isset($_POST["searchQuery"]))
{
if(empty($_POST["searchQuery"]))
{
$searchErr="Field cannot be empty!";
}
else //no error
{


$searchData=test_input($_POST["searchQuery"]);
$searchData=preg_replace("#[^0-9a-z]#i","",$searchData);
echo $searchData;
require_once('includes/db_connect.php');

$sQuery ="SELECT * FROM food WHERE Food_Name LIKE BINARY :searchData OR Food_Description LIKE BINARY :searchData";

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt=$conn->prepare($sQuery);
$stmt->bindParam(':searchData',$searchData); //binding var to parameter
$stmt->execute(); //executing prepared statement and returning 

结果到对象 $numResults=$stmt->rowCount((;

if($numResults==0)
{
$msg="Your search did not match any of our available 
foods!";
echo $msg;
} 
else
{
while($row=$addResult->fetch(PDO::FETCH_ASSOC))
{
echo $row['Food_Name'];
echo "<br/>";
}
}
}
}
}

?>
<?php

我目前正在开发一个网站。在一个部分中,我有一个搜索栏,用于从我的数据库中搜索文本匹配。但是,当我得到结果时,只返回区分大小写的文本。请问你能帮我吗?我正在使用Apache和phpMyAdmin

MySQLLIKE运算符在设计上不区分大小写,除非相关列具有区分大小写的排序规则。

如果需要区分大小写的搜索,可以使用LIKE BINARY

SELECT * 
FROM food 
WHERE 
Food_Name LIKE BINARY :searchData 
OR Food_Description LIKE BINARY :searchData

另一方面,如果您的列具有区分大小写的排序规则,并且您希望进行不区分大小写的搜索,则可以在比较之前使用lower()将列值和搜索词都变为小写:

SELECT * 
FROM food 
WHERE 
LOWER(Food_Name) LIKE LOWER(:searchData)
OR LOWER(Food_Description) LIKE LOWER(:searchData)

请注意,这两种方法都不适合索引。最重要的是,您希望使用符合您需求的列排序规则。如果需要不区分大小写的匹配项,请使用不区分大小写的排序规则,否则使用区分大小写的排序规则。

重要的旁注:您的代码容易受到 SQL 注入的影响。请阅读有关绑定参数和预准备语句的信息,并考虑修复代码。我更新了您的查询,使其使用命名绑定变量。

最新更新