当我通过章节号搜索任何记录时,它会起作用。
但问题是当我从下拉列表中选择章节编号1或2 并搜索该章中包含的所有记录时。
它显示1,11,21,31 ...或2,21,12中包含的所有记录,......就像这样。
我知道我写了'喜欢'那就是它发生的原因。但是当我写“ = ”运算符时,我在我的代码中发表了评论,这对我来说也不起作用。
解决此问题的完美查询是什么?
我的代码:
<?php
include("conn.php");
$name=$_POST['fname'];
$name2=$_POST['chapter'];
$sql="SELECT distinct * FROM $user WHERE question like '%".$name."%' and Chapter like '%".$name2."%'";
// $sql="SELECT * FROM $user WHERE question='$name' and Chapter='$name2'";
$result=mysql_query($sql,$connection) or die(mysql_error());
while($row=mysql_fetch_array($result)) {
?>
答案 0 :(得分:1)
我很想知道返回的查询中“章”的类型是什么,并试着看看为什么相等比较不起作用。 如果输入是直截了当的(即它实际上只是普通的旧字符串),那么我会寻找空白字符或类似的东西,这会阻碍相等比较。
同样,我想知道“问题”中的相等是否会破坏您的备用查询。
猜测,请尝试以下方法之一:
$sql="SELECT distinct * FROM $user WHERE question like '%".$name."%' and Chapter like '$name2'";
$sql="SELECT distinct * FROM $user WHERE question like '%".$name."%' and Chapter='$name2'";
哦,你应该做些什么来正确地逃避这些参数,以避免任何令人讨厌的SQL注入攻击。
答案 1 :(得分:0)
问题是第一个查询的这一部分:
Chapter like '%".$name2."%'
如果=
不起作用,那么我可以想到两件事。首先,Chapter
实际上是一个列表,可能是逗号分隔列表。第二个是数据库中存在无关的字符。
如果Chapter
确实是一个列表,请改用find_in_set()
:
find_in_set($name2, Chapter) > 0
答案 2 :(得分:0)
您在SQL查询中直接使用$ _POST变量,这使您容易受到SQL注入攻击。请查看此页面了解相关方法:http://bobby-tables.com/php.html。您应该使用mysql_real_escape_string
或准备好的语句(更好)。最好的解决方案可能是使用PDO。
此外,如果您想要更好的答案,请格式化您的问题,以便轻松阅读,包括示例输入,输出和数据库内容,并确保您的代码正确缩进。
我现在可以假设您的数据库字段可能包含的不仅仅是您想要匹配的数据。领先/尾随空间还是什么?
答案 3 :(得分:0)
您的查询中的主要问题在本节
喜欢'%'。$ name。“%'
只需从您编写的整个查询中删除%符号,然后检查您的查询是否有效 正常。