PHP 使用 while 循环来获取项目,使用动态选择函数?

标签 php mysql

好吧,我从来没有使用过动态函数,不知道为什么,我从来不喜欢使用explode()、implode()等。

但是我已经尝试过了,但出了点问题。

    public function fetch($table, array $criteria = null)
    {
        // The query base
        $query = "SELECT * FROM $table";

        // Start checking
        if ($criteria) {
            $query .= ' WHERE ' . implode(' AND ', array_map(function($column) {
                return "$column = ?";
            }, array_keys($criteria)));
        }

        $check = $this->pdo->prepare($query) or die('An error has occurred with the following message:' . $query);
        $check->execute(array_values($criteria));

        $fetch = $check->fetch(PDO::FETCH_ASSOC);

        return $fetch;
    }

这是我的查询。

基本上,我将返回保存 fetch 方法的变量 $fetch

然后在某个地方,我想使用 while 循环来获取数据,我将使用它:

$r = new Database();

while ($row = $r->fetch("argonite_servers", array("server_map" => "Wilderness")))
{
    echo $row['server_map'];
}

现在,我没有收到任何错误,但浏览器一直在加载,最终会由于内存不足而卡住。

那是因为循环一直在运行,不停地运行。 它为什么要这样做?我怎样才能让这个动态查询工作?

编辑:

$r = new Database();
$q = $r->fetch("argonite_servers", array("server_map" => "Wilderness"));

while ($row = $q->fetch(PDO::FETCH_ASSOC))
{
    echo $row['server_map'];
}

最佳答案

PDO 的一个很好的功能是 PDOStatement 实现了 Traversable。这意味着您可以直接迭代它:

// `$check` is a `PDOStatement` object
$check = $this->pdo->prepare($query) or die('An error has occurred with the following message:' . $query);
$check->execute(array_values($criteria));

$check->setFetchMode(PDO::FETCH_ASSOC);

return $check;

使用它:

$statement = $r->fetch("argonite_servers", array("server_map" => "Wilderness"));
foreach ($statement as $row) {

}

关于PHP 使用 while 循环来获取项目,使用动态选择函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17833105/

相关文章:

php 不能执行任何外部命令?

MySQL 使用来自另一个表的信息更新一个表

sql - 如何在 MySQL 的给定组中标记重复项?

带链接的 PHP for() 循环

php - 使用变量作为发布到 php/mysql 的值

php - 如何使用 MySQL 数据填充 php/html 表单

mysql - 在mysql中获取浏览器 session

mysql - 需要帮助编写更新查询并替换 mysql 中的许多字符串值

php - Magento 模型不会保存值

php - MySQL 总是返回期望参数 1 是 mysqli_result,boolean given