请问这个代码中的mysqli_num_rows`函数有什么问题吗?

时间:2018-02-25 18:09:44

标签: php mysqli

我认为错误是SQL查询还是numrows功能? 还有一些事情可能是错的,因为我做了很多改变,现在我完全糊涂了。 请问有人在这段代码中告诉mysqli_num_rows有什么问题吗? 提前谢谢。

            <?php
                $i=0;
                $key=$_GET['abc'];
                $ex=explode(" ", $key);
                $query="SELECT * FROM search";

                /*foreach ($ex as $val)
                {
                    $i++;
                    if($i == 1)

                        $query .="keywords like '%$val%' ";
                        else
                        $query .="or keywords like '%$val%' ";

                }*/
                $con=mysqli_connect("localhost","xxxxxxx","xxxxxxx","search");
                if (!$con)

                        die("Connection failed: " . mysqli_connect_error());

                        else

                        echo "Connected successfully";

                mysqli_select_db($con,"search");

                $queryy=mysqli_real_query($con,$query);
                $nr =@mysqli_query($con, $queryy);
                $row=mysqli_num_rows($nr);

                if($row>0)
                {
                    while($r=mysqli_fetch_assoc($queryy))
                    {
                        $id=$r['id'];
                        $title=$r['title'];
                        $description=$r['description'];
                        $keywords=$r['keywords'];
                        $link=$r['link'];

                        echo "<h2> <a href='$link'>$title</a></h2> $description <br /><br />";

                    }
                }
                else
                    echo "no results found for \"<b>$key</b>\" ";   
            ?>

1 个答案:

答案 0 :(得分:0)

$queryy=mysqli_real_query($con,$query);
$nr =@mysqli_query($con, $queryy);
$row=mysqli_num_rows($nr);

在您的代码中,您将第一个函数中的布尔指示符代替查询字符串传递给第二个函数。这显然会失败,你不应该尝试执行两个查询。你应该删除第一个。

您还应该删除@错误抑制并执行正确的错误检查。例如:

$result = mysqli_query ($con, $query);
if ($result)
{
    $rows = mysqli_num_rows ($result);
    if ($rows > 0)
    {
        while ($r = mysqli_fetch_assoc ($result))
        {
             // Do stuff
        }
    }
    else
    {
        echo "no results...";
    }
}
else
{
    // Query failed.
}

你会注意到我给变量更有意义的名字。另请注意,mysqli_fetch_assoc()函数采用结果参数,而不是查询字符串。

请注意,对于比简单SELECT *查询更复杂的事情,您可能应该使用prepared statements代替。

您还应该使用htmlspecialchars()来转义HTML输出,以避免XSS攻击,并且通常会使输出失败令人尴尬。 E.g:

$link_h  = htmlspecialchars ($link);
$title_h = htmlspecialchars ($title);
echo "<h2> <a href='$link_h'>$title_h</a></h2>...";

等等。