Php 使用MySQL查询中的多行

Php 使用MySQL查询中的多行,php,mysql,database,pagination,Php,Mysql,Database,Pagination,在我开始之前,我想指出我可以解决我的问题。我已经用PHP排练了足够多的内容,能够找到一个解决方案来解决我正在尝试做的事情。然而,我想让它模块化;我将简化我正在尝试做的事情,这样就不会偏离我正在做的事情的目的。记住这一点 我正在开发一个简单的CMS来管理用户数据库和编辑他们的信息。它具有分页功能(有效),左侧有一个按钮,单击该按钮可打开表单编辑其信息并将其提交到数据库(有效) 不起作用的是使用一个非常基本的脚本在表中显示MySQL中的每一行,我不会详细介绍它是如何工作的。但它基本上是通过以下方式执

在我开始之前,我想指出我可以解决我的问题。我已经用PHP排练了足够多的内容,能够找到一个解决方案来解决我正在尝试做的事情。然而,我想让它模块化;我将简化我正在尝试做的事情,这样就不会偏离我正在做的事情的目的。记住这一点

我正在开发一个简单的CMS来管理用户数据库和编辑他们的信息。它具有分页功能(有效),左侧有一个按钮,单击该按钮可打开表单编辑其信息并将其提交到数据库(有效)

不起作用的是使用一个非常基本的脚本在表中显示MySQL中的每一行,我不会详细介绍它是如何工作的。但它基本上是通过以下方式执行数据库查询:

SELECT * FROM users OFFSET (insert offset here) LIMIT (insert limit here)
本质上,使用分页,它会告诉要偏移的数字,限制是每页显示多少用户。这些设置、定义和测试都是准确的,它们确实有效。然而,我不太熟悉如何处理这些结果

以下是第2页关于该CMS的查询示例:

SELECT * FROM users OFFSET 10 LIMIT 10
这将在数据库中返回10行、10个用户。当我在命令提示符下尝试此命令时,它确实提供了我所需要的:

但当我尝试用PHP处理这些数据时,如下所示:

<?php
    while ($row = $db->query($pagination->get_content(), "row")) {
        print_r($row);

    }
?>
$pagination->get_content方法是:

public function query($sql, $type = "assoc") {
    $this->last_query = $sql;
    $result = mysql_query($sql, $this->connection);
    $this->confirm_query($result);

    if ($type == "row") {
        return mysql_fetch_row($result);
    } elseif ($type == "assoc" || true) {
        return mysql_fetch_assoc($result);
    } elseif ($type == "array") {
        return mysql_fetch_array($result);
    } elseif ($type == false) {
        return $result;
    }
}
    public function get_content() {
        global $db;

        $query = $this->base_sql;

        if (!isset($_GET["page"])) {
            $query .= " LIMIT {$this->default_limit}";
            return $query;
        } elseif (isset($_GET["page"]) && $_GET["page"] == 1) {
            $query .= " LIMIT {$this->default_limit}";
            return $query;
        } elseif (isset($_GET["page"])) {
            $query .= " LIMIT {$this->default_limit}";
            $query .= " OFFSET " . (($_GET["page"] * $this->default_limit) - 10);
            return $query;
        }
    }
while循环的结果(应该打印出数据库的每一行,不是吗?)每次都给我相同的行,直到PHP达到内存限制/超时限制

如果事情很简单,请原谅我。我很少以这种方式处理数据库数据。我想要它做的是显示我请求的10个用户。请随时提问

经过一些评论,我决定切换到MYSQLI函数,它可以正常工作

    // performs a query, does a number of actions dependant on $type
public function query($sql, $type = false) {
    $sql = $this->escape($sql);

    if ($result = $this->db->query($sql)) {
        if ($type == false) {
            return $result;
        } elseif ($type == true || "assoc") {
            if ($result->num_rows >= 2) {
                $array;
                $i = 1;

                while ($row = $result->fetch_assoc()) {
                    $array[$i] = $row;
                    $i++;
                }

                return $array;
            } elseif ($result->num_rows == 1) {
                return $result->fetch_assoc();
            }
        } elseif ($type == "array") {
            if ($result->num_rows >= 2) {
                $array;
                $i = 1;

                while ($row = $result->fetch_array()) {
                    $array[$i] = $row;
                    $i++;
                }

                return $array;
            } elseif ($result->num_rows == 1) {
                return $result->fetch_array();
            }
        }
    } else {
        die("There was an error running the query, throwing error: " . $this->db->error);
    }
}
简言之,我将整个数据库删除,然后基于OOD mysqli(使用类mysqli)重新创建另一个数据库,并将其重新格式化为扩展mysqli的类。可以在以下位置更好地查看完整脚本:


是的,它做了我想做的事。它查询多个行,我可以使用我计划使用的相同方法处理它们。谢谢您的帮助。

我认为您应该使用
mysql\u fetch\u assoc()



mysql_*功能再次出现。。。。来吧,大家:(我假设你们对我使用“mysql\u fetch\u row”发表评论)还有其他的吗?如果你要这么说,至少告诉我,如果mysqli版本真的有区别的话,我应该使用它。从我到目前为止所做的,我从来没有真正需要使用更新的函数。
限制开始行,行到取数
。你只需继续运行相同的查询,取第一个
$this->default\u限制
行。您需要递增该值,因此您正在获取<代码>限制$CurrnType页,$-> DeFultTyLime。但是,您仍然会为每一行运行一个查询,这将是每一个低效率的,您应该。它们不再被维护和正在学习。相反,考虑使用PDO。比利是正确的,如注释A。如上所述,mysql\u fetch\u row只返回一行是的,我记得我尝试过fetch\u assoc,但运气不好。给我一点时间,我会马上重新测试。是的,我尝试过使用fetch\u assoc,但会加载页面。我不太清楚这是为什么,但我认为我最好的办法是彻底重构我的数据库。根据大家关于使用mysql\u的说法函数,显然mysqli或PDO是一种选择。至于我为什么使用mysqli函数,主要是因为习惯?我无法想象这不起作用。要迭代行,您需要使用
mysql\u fetch\u assoc()
mysql\u fetch\u array()
。前者提供字段名-唯一的缺点是重复的列名不起作用。“加载页面”是什么意思?
<?php
    while ($row = $db->query($pagination->get_content())) {
        print_r($row);
    }
?>