从函数返回关联数组

时间:2014-02-07 15:48:44

标签: php

这就是我通常使用数据库信息运行循环的方法

        $query = "SELECT * from courses ORDER BY id DESC LIMIT 4";
        $stmt = $db->prepare($query);
        $stmt->execute();

        while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { }

现在$row[]可用于表示循环中的数据库信息。

我的问题是我会在单独的while循环中大量使用这个查询。但是,我不希望每次需要时都要完成此语句,因此我希望函数能够引用所需的任何变量。

例如,我试过了。

function retrieve_assoc_array_limit4($table) {  
    $user = '***';
    $pass = '***';
    $db = new PDO('mysql:host=localhost;dbname=***', $user, $pass);

    $query = ("SELECT * FROM ? ORDER BY id DESC LIMIT 4");
        $stmt = $db->prepare($query);
        $stmt->bindValue(?, $table);
        $stmt->execute();

    $row = $stmt->fetch(PDO::FETCH_ASSOC);

    return $row;
}

但是当我尝试时,我会获得无限量的同样信息的回报。

while($row = retrieve_assoc_array_limit4($table_name)) {
    exho $data;
}

我的问题是如何在逻辑上使用函数中的第一个代码,这样我就可以在不使用完整语句的情况下同时使用它。

1 个答案:

答案 0 :(得分:0)

这样做的方法很多,只需稍加改动即可使用您的代码:

调用fetchAll()而不是fetch():

function retrieve_assoc_array_limit4($table) {  
    $user = '***';
    $pass = '***';
    $db = new PDO('mysql:host=localhost;dbname=***', $user, $pass);

    $query = ("SELECT * FROM ? ORDER BY id DESC LIMIT 4");
    $stmt = $db->prepare($query);
    $stmt->bindValue(?, $table);
    $stmt->execute();

    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

    return $rows;
}

然后调用你的函数并做一段时间或预约:

$rows = retrieve_assoc_array_limit4($table_name);
foreach($rows as $row){
    //do your stuff
}