使用MySQL查询中的多行

时间:2015-06-18 21:34:49

标签: php mysql database pagination

在开始之前,我想指出我可以解决我的问题。我已经在PHP中进行了足够的排练,以便能够解决我正在尝试做的事情。 然而我想让它模块化;没有太多细节来进一步混淆我的问题,我会简化我想要做的事情,这样就不会影响我正在做的事情的目的。记住这一点。

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

什么不起作用是使用一个非常基本的脚本在表格中显示MySQL的每一行,我不会详细了解它是如何工作的。但它基本上用这个来进行数据库查询:

SELECT * FROM users OFFSET (insert offset here) LIMIT (insert limit here)

基本上,通过分页,它会告知要偏移的数字,限制是每页显示的用户数。这些设置,定义和测试准确无误,它们确实有效。但是,我不太熟悉如何处理这些结果。

以下是此CMS的第2页示例查询:

SELECT * FROM users OFFSET 10 LIMIT 10

这应该在数据库中返回10行,10个用户。它确实如此,当我在命令提示符下尝试此命令时,它给了我我需要的东西: enter image description here

但是当我尝试在PHP中处理这些数据时:

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

    }
?>

$ db-&gt;查询方法是:

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;
    }
}

$ pagination-&gt; get_content方法是:

    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达到内存限制/超时限制。

enter image description here

如果它简单的话,请原谅我。我很少以这种方式处理数据库数据。我想要它做的是显示我请求的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的类。可以在此处更好地查看完整脚本:

http://pastebin.com/Bc00hESn

是的,它符合我的要求。它查询多行,我可以处理它们,但我希望使用我计划执行的相同方法。感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我认为你应该使用mysql_fetch_assoc()

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