在for循环之后未到达语句块


Statement block not reached after for loop

我正试图在数据库中添加搜索选项,我已经创建了以下程序,但它在循环部分给了我一条错误消息,我无法理解为什么它没有转向else语句。请检查一下,告诉我哪里出错了。

<?php
    require 'connect.php';
    if (isset ($_POST['username']))
    {
        $username = $_POST['username'];
        $query = "select * from users where username like '%$username%' ";
        if ($query_result = mysql_query($query))
        {
            $numrows = mysql_num_rows($query_result);
            if ($numrows > 1)
            {
                for ($i = 0; $i < $numrows; $i++)
                {
                    echo $query_result = mysql_result($query_result, $i, 'username');
                }
            }
            else
            {
                echo 'No Results Found!';
            }       
        }
        else
        {
            echo 'No Results Found!!';
            // echo mysql_error();
        }
    }
    else
    {
        echo 'Are you kidding with me !';
    }
?>

感谢

在您正在进行的循环中:

echo $query_result=     mysql_result($query_result,$i,'username');

这并不意味着:你是echho——一个作业的结果。不仅仅是任何任务。您正在将mysql_result的返回值重新分配给资源:$query_result。因此,在循环的第二次迭代中,mysql_result调用将失败。

也就是说,mysql_*扩展名已弃用,不应再使用,请查看首选的替代扩展名,如PDOmysqli_*
您也可以将循环重写为while循环,使用:

$out = '';
while($row = mysqli_fetch_assoc($query_result))
{
    $out .= $row['username'].'<br/>';
}

查询:
与其执行SELECT *,它基本上为与WHERE子句匹配的每一行选择所有字段,如果您感兴趣的只是用户名(从您的代码中看似乎是这样),为什么不简单地使用SELECT username呢。这在数据库上更容易,而且不需要那么多资源。

您的WHERE子句读取username LIKE '%{$var}%',这意味着,如果输入是a,那么您的查询将返回所有在某个位置包含a的用户名。除了不太安全之外,它也非常缓慢。您的查询很可能执行全表扫描,可能需要I/O磁盘操作。使用不带%通配符的like以确保不区分大小写,使用单字符通配符_,或者如果需要,只使用一个%。对"sup"的用户名搜索产生《超人》比相同的搜索产生《晚餐至上》更有意义

最后,您的代码非常容易受到mysql注入攻击。如果我发布用户名:'; DROP TABLE users; --,您的查询将如下所示:

select * from users where username like '%'; DROP TABLE users; -- %'

这意味着灾难,不是吗?

在循环中调用mysql_result并用单元格的值替换查询资源$query_result。在下一次调用中,$query_result将不再是有效的资源。

注意:不确定你想做什么,因为你甚至没有使用这个值。。。只需删除分配即可。

我更改了几行代码。。我把你的循环改成while循环。。试试这个。。

    if($numrows!=0)
    {
        while ($rs = mysql_fetch_array($query_result)){
          echo $rs['username'] . " <br>";
        }
    }

希望它能帮助。。。