我有以下代码:
$surname=$_POST['surname'];
$sql2="SELECT * FROM andriana WHERE surname LIKE '$surname%'";
if (!mysql_query($sql2,$con)){
die('Error: ' . mysql_error());
}
$result2 = mysql_query($sql2);
echo "<table>";
while ($data = mysql_fetch_array($result2)) {
echo "<tr>";
echo "<td style='width:100px;height:40px'>".$data['name']."</td>";
echo "<td style='width:100px;height:40px'>".$data['surname']."</td>";
echo "<td style='width:100px;height:40px'>".$data['checkIN']."</td>";
echo "</tr>";
}
echo "</table><br><br>";
我们在表格中说明以下记录:
- Surname -
Greyjoy
Lannister
Stark
如果我不输入完整的姓氏,会发生错误,该姓氏不存在。因此,LIKE“%”无效。
我试过LIKE'“。$ surname。”$'或LIKE'{$ surname}%',但也没有发生任何事情。
我在Stack中搜索了很多,似乎上面的试用版应该正常工作。
我错过了什么?
为了更加明白,我确信变量包含实际的姓氏作为字符串,因为如果我输入整个姓氏,我的应用程序正常工作。但是,如果我输入前3个字母(或4个...),应用程序将返回我输入的姓氏错误的自制消息。
另外,为了解决区分大小写的问题,我的测试是使用只有小字符的姓氏。
谢谢大家的努力,仍然对这个问题感到满意!
答案 0 :(得分:2)
确保姓氏有一个值,并且您要传递一个值。我建议做一个var dump
$surname=$_POST['surname'];
var_dump($surname);
这将显示$ surname等于的值,如果它什么都不是,那么这就是你的查询不起作用的原因。
答案 1 :(得分:1)
我想它会起作用,但试试这个:
"SELECT * FROM andriana WHERE surname LIKE '" . $surname . "%'";
答案 2 :(得分:1)
你有两个明确的问题和一个潜在的问题:
首先,您没有使用绑定变量。这会打开SQL注入攻击的脚本,这是一个非常常见且可预防的安全错误。将您的SQL脚本替换为:
$sql2 = "SELECT * FROM andriana WHERE surname LIKE '%?%'";
然后prepare()
你的语句,绑定你想要的变量,execute()
它。有关详细讨论,请参阅http://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php。
其次,%
通配符代表“任何字符”,但它是位置的,这意味着您应该将它包含在LIKE参数的开头,如上所述(“%?%
”)。
最后,一个潜在的问题:LIKE并不总是不区分大小写。我认为 mySQL会做一些不区分大小写的LIKE,但是你可能应该设置一个配置。如有疑问,请使用ILIKE
或通过降低比较的两边来手动强制进行不区分大小写的比较。
答案 3 :(得分:0)
将通配符放在开头和结尾:$sql2="SELECT * FROM andriana WHERE surname LIKE '%$surname%'";
。
答案 4 :(得分:0)
我是一个完全白痴。 Guyz你很完美,实际上用“LIKE'$ surname%'”的查询工作正常。
我的问题是,在此之前,我有一个检查控件,我没有检查LIKE,而是检查变量本身。
请接受我的倾销,再次感谢您的时间!