对于循环失控?

时间:2011-09-09 16:13:05

标签: php

我已经为我正在构建的小型搜索功能组合了一个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”一词传递给它,我可以确认查询是否完美。

感谢您阅读,希望您能提供帮助。

4 个答案:

答案 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>";
}