我希望能够返回下面列出的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个变量,那么迭代将停止,并且在循环完成之前不会继续..任何人都可以帮助我吗?我一直在抨击这一点。
答案 0 :(得分:1)
这两个while循环不相等:
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
print_r($row);
}
和
$data = $stmt->fetch(PDO::FETCH_ASSOC);
while($row = $data) {
差异:
$row=$data
始终为真并且仅显示第一个结果。$stmt->fetch(PDO::FETCH_ASSOC)
来检索行,这样,每次调用它时都会检索一行(下一行)。仅用于检索所有行的=
赋值函数不能引用它。根据http://php.net/manual/en/pdostatement.rowcount.php的另一个说明:
对于大多数数据库,PDOStatement :: rowCount()不返回 受SELECT语句影响的行数。相反,使用 PDO :: query()发出带有相同的SELECT COUNT(*)语句 将谓词作为预期的SELECT语句,然后使用 PDOStatement :: fetchColumn()来检索将要的行数 被退回然后,您的应用程序可以执行正确的操作。
但您直接使用fetchColumn()
而未使用select count(*)
答案 1 :(得分:0)
答案 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;
}