函数返回多个变量

时间:2013-08-18 06:46:19

标签: php function loops

我希望能够返回下面列出的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个变量,那么迭代将停止,并且在循环完成之前不会继续..任何人都可以帮助我吗?我一直在抨击这一点。

3 个答案:

答案 0 :(得分: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. 应该调用
  3. $stmt->fetch(PDO::FETCH_ASSOC)来检索行,这样,每次调用它时都会检索一行(下一行)。仅用于检索所有行的=赋值函数不能引用它。
  4. 结果:您的代码将根据最长执行时间终止执行。
  5. 根据http://php.net/manual/en/pdostatement.rowcount.php的另一个说明:

      

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

    但您直接使用fetchColumn()而未使用select count(*)

答案 1 :(得分:0)

你可以这样做:

OR

  • 返回一个分配了3个变量的数组

答案 2 :(得分:0)

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

功能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();
    $return_data = array();
        if($num_rows) {
          $return_data = $data;
        } else {
          $return_data[] = "Error!";
        }

return $return_data;
    }