PHP变量和MySQL LIKE查询无法正常工作

时间:2013-12-17 16:04:27

标签: php mysql sql sql-like

我有以下代码:

$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个...),应用程序将返回我输入的姓氏错误的自制消息。

另外,为了解决区分大小写的问题,我的测试是使用只有小字符的姓氏。

谢谢大家的努力,仍然对这个问题感到满意!

5 个答案:

答案 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,而是检查变量本身。

请接受我的倾销,再次感谢您的时间!