我在学校里学习用MySQL和PHP编写搜索程序。
我有我的search.php的代码:
<?php
mysql_connect("localhost", "root", "");
mysql_select_db("db1");
$sql = "SELECT * from tuser";
$Namen = mysql_query ($sql);
$user_id = $_GET['user_id'];
$search = $_GET['search'];
while ($ergebnis_datensatz = mysql_fetch_array($Names)){
$user_id = $ergebnis_datensatz['user_id'];
$name = $ergebnis_datensatz['name'];
$surname = $ergebnis_datensatz['surname'];
if ($name == "$search") {
echo "$name $surname";
}
else {
echo "";
}
if ($surname == "$search") {
echo "$name $surname";
}
else {
echo "";
}
}
?>
在我的搜索输入网站上,我有一个简单的输入“name = search”
如果我现在使用此搜索,则区分大小写。示例:我搜索“* k * elvin”并且不显示任何内容。但如果搜索“* K * elvin”,我会得到我的结果。
如何让它不区分大小写?
答案 0 :(得分:2)
检查表的排序规则。默认情况下(取决于您的配置),MySQL将使用utf8_general_ci
,其中ci
不区分大小写。另一方面,如果您使用utf8_bin
,则会获得区分大小写的排序规则,并且所有搜索都将区分大小写。
其他常见的排序规则为latin1_general_ci
(以及*_cs
和latin1_bin
)。
答案 1 :(得分:1)
您确实应优化查询并仅搜索相关选项。
虽然您可以通过将两个参数都设置为小写来搜索不区分大小写(例如)。这样,您的代码就会变为:if (strtolower($name) == strtolower($search)) {
和if (strtolower($surname) == strtolower($search)) {
但是,我会将您的查询限制为:
SELECT * from tuser WHERE name LIKE $search OR surname LIKE $search
,它会产生与您的搜索参数匹配的所有结果。
不要忘记逃避$ search
答案 2 :(得分:1)
如前所述,大多数常见的MySQL排序规则都不区分大小写。但是,如果您不想修改排序规则,可以使用BINARY运算符解决此问题。
http://dev.mysql.com/doc/refman/5.0/en/charset-binary-op.html
即
SELECT *
FROM tuser
WHERE BINARY $search IN (name,surname)
所以给予
$sql = 'SELECT * FROM tuser WHERE BINARY "'.$search.'" IN (name,surname)';
重要请注意这一点。目前,这可能会使您的SQL开放注入。这比选择EVERYTHING然后在PHP中循环它更有效,但是你需要先进行一些代码改进。
这里是关于SQL注入How can I prevent SQL injection in PHP?
的答案答案 3 :(得分:0)