MySQL/PHP like百分号不起作用
我知道这个问题以前已经被问过好几次了,但是我无法找到我的方式的错误。MySQL/PHP like百分号不起作用
问题:mysql_num_rows是返回false结果时
$sql = "SELECT * FROM $topic WHERE $names LIKE '%$q%'";
但是,如果我取代以下任何$ sql中,它将返回true。的var_dump
string(8) "Cust_Reg" string(5) "fName" string(2) "j "
resource(8) of type (mysql result)
string(46) "SELECT * FROM Cust_Reg WHERE fName LIKE '%j %'"
的
$sql = "SELECT * FROM $topic WHERE $names LIKE '%j%'";
$sql = "SELECT * FROM $topic WHERE $names ='Jack'";
$sql = "SELECT * FROM $topic WHERE $names = '$q' ";
结果如果我改变$ SQL = “SELECT * FROM $话题,其中$名称LIKE '引用%j%'”;
的var_dump为$行[ 'ID']将显示
"SELECT * FROM Cust_Reg WHERE fName LIKE '%j%'" string(4) "NjA="
string(4) "NjE=" string(4) "NjQ=" string(4) "NjY=" string(4) "ODI="
如果你能纠正我在我的方式错误,我会apprecaite它。
$q = mysql_real_escape_string($_GET['search']);
$q = strtolower($q);
$topic = mysql_real_escape_string($_GET['test']);
$names = mysql_real_escape_string($_GET['name']);
// SELECT * from Account_Reg where Account_Name LIKE '%$q%'
$table = "<table style='width:400px; padding:10; display:block;'><tbody>
<tr><td>ID</td><td>Account</td><td>First Name</td><td>Email</td></tr>";
$sql = "SELECT * FROM $topic WHERE $names LIKE '%{$q}%'";
$result = mysql_query($sql) or die (mysql_error());
var_dump($topic);
var_dump($names);
var_dump($q);
var_dump($result);
var_dump($sql);
if(is_resource($result) && mysql_num_rows($result) > 0){
while($row = mysql_fetch_array($result)) {
$table .= "<tr><td>".$row['ID']."</td>";
$cryt = base64_encode($row['ID']);
$row['ID'] = htmlspecialchars($cryt);
$link = "profile.cust.update.php?id=". urlencode($row['ID']);
$link = htmlentities($link);
if($names == "fName"){
$name = $row['fName'];
}elseif($names == "Account_Name"){
$name = $row['Account_Name'];
$row['email_add'] = "";
}
$table .="<td></td><td><a href='" .$link ."'</a>" .$name."</td><td>".$row['email_add']."</td></a> </tr>";
}$table .="</tbody</table";
}else{$table = "No row is selected"; }
问题是您的$ q "j "
中的尾随空格。当然
"SELECT * FROM $topic WHERE $names LIKE '%$q%'"
其转换为:
"SELECT * FROM $topic WHERE $names LIKE '%j %'"
返回不同的结果来自:
"SELECT * FROM $topic WHERE $names LIKE '%j%'"
你是对的! ('_位置:account.search.php?search ='。urlencode($ _ GET ['search'])。'&& test ='。urlencode($ _ GET ['test'])。'&& name ='。urlencode(' $ _GET [ '名称']));它确实有一个空间...再次感谢Stackoverflow社区! –
尝试使用:
$sql = "SELECT * FROM $topic WHERE $names LIKE '%{$q}%'";
或
$sql = "SELECT * FROM $topic WHERE $names LIKE '%" . $q . "%'";
和调试,尝试输出$ SQL执行前,怎么看变量已被替换
echo $sql; die();
从文档210
@AdamWaite:
http://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html
MySQL提供标准的SQL模式匹配以及图案的形式匹配基于类似于那些由UNIX实用程序如vi,grep的使用扩展正则表达式,和sed。
通过SQL模式匹配,您可以使用“_”匹配任何单个字符和“%”以匹配任意数量的字符(包括零字符)。在MySQL中,默认情况下,SQL模式不区分大小写。这里显示了一些示例。当您使用SQL模式时,不要使用=或<>;改为使用LIKE或NOT LIKE比较运算符。
'的var_dump($ _GET [ '搜索'])'。它在你当前的测试场景中实际上包含了什么? – nobody