PHP - mysql_fetch_assoc的函数

时间:2012-09-19 20:40:58

标签: php mysql

如果我在PHP中执行此操作,它可以正常工作并按预期循环:

$rs = mysql_query($sql);
while ($row = mysql_fetch_assoc($rs)){
    writeme("UserID: " . $row["UserID"]);
}

但是我一直想把它抽象成我称之为ExecuteQuery的函数:

function ExecuteQuery($sql){
$result = mysql_query($sql);

if ($result) {
    if($result != 1){
        return mysql_fetch_assoc($result); // return recordset
    }
}else{
    $message  = 'Invalid query: ' . mysql_error() . "<br>";
    $message .= 'Whole query: ' . $sql;
    echo $message;
    die();
}

}

此功能在3种场景中有2种效果很好:

1-适用于返回1行的查询,我可以像这样访问:

$ rs = ExecuteQuery($ sql);

$ foo = $ rs [“UserID”];

2-适用于不返回任何记录的sql语句,如UPDATE或DELETE。

3-但是当我尝试返回一个返回多个记录的记录集,然后遍历它时,我得到一个无限循环,我的浏览器崩溃了。像这样:

$rs = ExecuteQuery($sql);
while ($row = $rs){
    writeme("UserID: " . $row["UserID"]);
}

如何修改while循环以使其前进到记录集中的每个新记录并在最后一条记录后停止?我确定这是一个愚蠢的小事,但我还不熟悉PHP。我真的很喜欢我的ExecuteQuery函数能够处理所有3个场景,它非常方便。

3 个答案:

答案 0 :(得分:1)

尝试foreach($rs as $row){而不是while ($row = $rs){

答案 1 :(得分:0)

请勿使用while,请使用foreach:

$rs = ExecuteQuery($sql);
foreach ($rs as $row){
    writeme("UserID: " . $row["UserID"]);
}

答案 2 :(得分:0)

mysql_fetch_assoc()只返回结果的一行。要获取下一行,需要再次调用mysql_fetch_assoc()。您可以做的一件事是让您的ExecuteQuery函数返回一个数组数组:

$rows = array();
while ($row = mysql_fetch_assoc($result) !== false) {
   $rows[] = $row;
}
return $rows;

此外,您不应使用mysql_ *函数,因为它们已被弃用。请尝试使用PDO或mysqli_ *。