从php函数返回mysqli_fetch_object,同时继续工作

时间:2014-07-02 07:56:20

标签: php mysql mysqli

我正在为数据库查询创建函数:

function my_db_query($query_data) {
    $db_query = mysqli_query($query_data, $db_connection) or die(mysqli_error());
    if(mysqli_num_rows($db_query) > 0) {
        return mysqli_fetch_object($db_query);
    } else {
        return false;
    }
}

function article( $ID='' ) {
    $db_query_string = "SELECT * FROM `articles` WHERE id='".$ID."'";
    $db_query = my_db_query($db_query_string);
    return $db_query;
}

但是当我调用函数

while($content = article(5)) {
    echo $content->title;
}

它连续显示标题,PHP不会停止运行。

如何让它停止?因为它不像我运行while ($content = mysqli_fetch_object($db_query))时那样。

PS:数据库中可能有多个id为5的行。

非常感谢!

5 个答案:

答案 0 :(得分:1)

问题在于my_db_query()的设计。您的函数进行SQL查询并返回单个结果。每次调用函数时,它都会生成一个不知道先前查询的新查询,因此它将返回与之前相同的结果。您需要分离查询和获取操作。换句话说:只需删除my_db_query()函数并使用PHP提供的函数。

编辑。

另一种选择:一次获取所有行并循环遍历它们。

function my_db_query($query_data) {
    $db_query = mysqli_query($query_data, $db_connection) or die(mysqli_error());
    if(mysqli_num_rows($db_query) > 0) {
                    // return all rows at once
        return mysqli_fetch_all($db_query);
    } else {
        return false;
    }
}

function article( $ID='' ) {
    $db_query_string = "SELECT * FROM `articles` WHERE id='".$ID."'";
    $db_query = my_db_query($db_query_string);
    return $db_query;
}

    $articles = article(5);
    // loop through the articles.
foreach($articles as $content) {
    echo $content->title;
}

答案 1 :(得分:0)

因为无限循环。根据你的代码它将只返回一个无限时间的结果。

您使用参数article调用函数5,返回始终为true。而不是必须使用{/ 1}}语句,如

IF

答案 2 :(得分:0)

if($content = article(5)) {
    echo $content->title;
}

?您在无限循环中进行查询,每次重播时查询,如果ID = 5的文章存在,结果可能永远不会为空

编辑:我刚刚看到了另一个答案,好吧,您要查看数据库,ID应该是唯一的,或者使用元组键

EDIT2:你可以使用if语句和你的文章' function可以返回包含所有行的数组

答案 3 :(得分:0)

while ($content = article(5))

这将在每次循环迭代中执行!在每次循环迭代中将一次又一次地调用article(5)。它一次又一次地查询数据库并且每次都返回一个新的结果对象。它根本不起作用。你不能将调用埋在mysqli_fetch_object三层深处的函数调用中;你必须直接在循环中调用mysqli_fetch_object

答案 4 :(得分:0)

让我们试着简单:

<?php
$db_query_string = "SELECT * FROM `articles` WHERE id=5";
$db_query = mysqli_query($db_query_string, $db_connection) or die(mysqli_error());

if (mysqli_num_rows($db_query) > 0) {
    while ($content = mysqli_fetch_object($db_query)) {
        echo $content->title;
    }
}