-1

我希望能够返回下面列出的 3 个变量,但是当我尝试时,我陷入了死胡同,因为我不知道如何从一个函数返回多个条目。一个函数只能返回一次,当它返回时,它就会终止,那么解决方法是什么?

function M($username){

            $query = "SELECT * FROM msg WHERE `to` = '".$this->userid."' && `to_viewed` = '0' && `to_deleted` = '0' ORDER BY `created` DESC";   
            $stmt = $this->connection->prepare($query);
            $stmt->execute();

    $data = $stmt->fetch(PDO::FETCH_ASSOC);
    $num_rows = $stmt->fetchColumn();

        if($num_rows) {
            $i=0;
            $this->messages = array();
            while($row = $data) {
// want to return these 3 for each result
                $this->messages[$i]['id'] = $row['id'];
                $this->messages[$i]['title'] = $row['title'];
                $this->messages[$i]['message'] = $row['message'];

                $i++;
            }
        } else {
            return 1; 
        }
    }

如果我想返回 3 个变量,那么迭代将停止,并且在循环完成之前不会继续.. 谁能帮帮我?我一直在为此苦苦挣扎。

4

3 回答 3

1

这两个while循环不相等:

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

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

区别:

  1. 如果至少返回一行,则第二个将产生无限循环,因为$row=$data始终为真并且仅显示第一个结果。
  2. $stmt->fetch(PDO::FETCH_ASSOC)应该调用检索行,以便每次调用它时检索一行(下一行)。这不能通过简单的=赋值函数来引用来检索所有行。
  3. 结果:您的代码将根据最大执行时间终止执行。

另请注意,根据http://php.net/manual/en/pdostatement.rowcount.php

对于大多数数据库,PDOStatement::rowCount() 不返回受 SELECT 语句影响的行数。相反,使用 PDO::query() 发出 SELECT COUNT(*) 语句,其谓词与预期的 SELECT 语句相同,然后使用 PDOStatement::fetchColumn() 检索将返回的行数。然后,您的应用程序可以执行正确的操作。

但是你直接使用fetchColumn()而不使用select count(*)

于 2013-08-18T07:21:52.623 回答
0

您可以执行以下任一操作:

或者

  • 返回一个分配了 3 个变量的数组
于 2013-08-18T06:52:25.703 回答
0

在检查是否有一些行受到影响并在函数外部处理 3 个变量之后,为什么不从查询中返回数据数组,因为没有简单的方法来返回 3 个变量。或使用该implode()函数返回 3 个变量的字符串。

函数 M($用户名){

            $query = "SELECT * FROM msg WHERE `to` = '".$this->userid."' && `to_viewed` = '0' && `to_deleted` = '0' ORDER BY `created` DESC";   
            $stmt = $this->connection->prepare($query);
            $stmt->execute();

    $data = $stmt->fetch(PDO::FETCH_ASSOC);
    $num_rows = $stmt->fetchColumn();
    $return_data = array();
        if($num_rows) {
          $return_data = $data;
        } else {
          $return_data[] = "Error!";
        }

return $return_data;
    }
于 2013-08-18T07:42:41.097 回答