<?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 注入的影响。请阅读有关绑定参数和预准备语句的信息,并考虑修复代码。我更新了您的查询,使其使用命名绑定变量。