PHP 1-liner every()with mysql_fetch_assoc()

时间:2010-05-16 15:13:18

标签: php mysql

尝试创建一个1-liner来循环遍历mysql结果集。

示例:

$sql = "SELECT uid, role FROM usr WHERE uid = '$this->uid'";
$r = db::q($sql);
if($r->rows()) {
  $q = mysql_fetch_assoc($r->result);
  while(list($k, $v) = each($q)) { // would like to omit line above and consolidate here
    $_SESSION['usr'][$k] = $this->$k = $v;
  }
}

问题是像这样整合while循环:

while(list($k, $v) = each(mysql_fetch_assoc($r->result))

返回错误la each()没有得到对象或数组,即使它当然是。我认为问题是一个投射问题,但似乎你无法做到:

each( (array) mysql_fetch_assoc($r->result))

有什么想法吗?我喜欢尽可能简洁地编码,并且在任何地方都有“$q = mysql_fetch_assoc($r->result)”会惹恼我,已经存在。

继续张贴...

谢谢!

3 个答案:

答案 0 :(得分:3)

帮自己一个忙,use PDO

$query->fetchAll();

MySQLi也有类似的方法/功能。

答案 1 :(得分:1)

您可以将mysql_fetch_assoc条件作为while条件的一部分:

while (($q = mysql_fetch_assoc($r->result)) && list($k, $v) = each($q)) {
    $_SESSION['usr'][$k] = $this->$k = $v;
}

答案 2 :(得分:0)

$_SESSION['usr'] = mysql_fetch_assoc($r->result);

或(如果$ _SESSION ['usr']已包含一些您想要保留的其他键的元素)

$_SESSION['usr'] = array_merge($_SESSION['usr'], mysql_fetch_assoc($r->result));