我已经为我正在构建的小型搜索功能组合了一个for循环。
代码如下
$keyword = explode("+", $keywords);
for($i=0; $i <= count($keyword); $i++){
//check user table
$q = "SELECT id, username FROM ".TBL_USERS." WHERE username LIKE '%$keyword[$i]%'";
$result = $database->query($q);
while($row=mysql_fetch_assoc($result)){
extract($row);
echo "<a href='/profile.php?id=$id'>$username</a>";
}
}
当它运行时,它以某种方式从数据库中检索所有用户。 这有什么明显的原因吗?
如果$keywords = "gregg";
,这仍然有效,因为没有+符号(只有一个单词)。无论哪种方式,当涉及多个单词时,这仍然无效!
如果将“gregg”一词传递给它,我可以确认查询是否完美。
感谢您阅读,希望您能提供帮助。
答案 0 :(得分:0)
您的索引有计数($ keyword) - 1,不计算($ keyword);
$keyword = explode("+", $keywords);
for($i=0; $i <= count($keyword) - 1; $i++){
//check user table
$q = "SELECT id, username FROM ".TBL_USERS." WHERE username LIKE '%".$keyword[$i]."%'";
$result = $database->query($q);
while($row=mysql_fetch_assoc($result)){
extract($row);
echo "<a href='/profile.php?id=$id'>$username</a>";
}
}
并更改了引号
答案 1 :(得分:0)
你的for循环看起来像:
for ($i=0; $i <= count($keyword); $i++)
这超过了$ keyword的结尾,因此循环执行的最后一个查询是“LIKE'%%'”,它将返回每一行。要解决此问题,请将其更改为:
for ($i=0; $i < count($keyword); $i++)
另外,你不能做“$ keyword [$ id]”。它必须是“{$ keyword [$ i]}”
答案 2 :(得分:0)
试试这个
$q = "SELECT id, username FROM ".TBL_USERS." WHERE username LIKE '%{$keyword[$i]}%'";
或更好的
$q = "SELECT id, username FROM ".TBL_USERS." WHERE username LIKE '%" . $keyword[$i] . "%'";
答案 3 :(得分:0)
考虑在sql中使用OR
:
$keyword = explode("+", $keywords);
$keywords = array_map("mysql_real_escape_string", $keywords);
$q = "SELECT id, username FROM user WHERE username LIKE '%" . implode("%' OR username LIKE '%", $keywords) . "%';";
$result = $database->query($q);
while($row = mysql_fetch_assoc($result))
{
extract($row);
echo "<a href='/profile.php?id=$id'>$username</a>";
}