繁体   English   中英

PHP-mysql_fetch_assoc的函数

[英]PHP - function for mysql_fetch_assoc

如果我在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-非常适合不返回记录(例如UPDATE或DELETE)的sql语句。

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

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

如何修改while循环,使其前进到记录集中的每个新记录,并在最后一条记录之后停止? 我敢肯定这是一个愚蠢的小事,但是我还不是PHP的专家。 我真的希望ExecuteQuery函数能够处理所有3种情况,这非常方便。

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

不要使用while,请使用foreach:

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

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

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

另外,不应该使用不推荐使用的mysql_ *函数。 尝试改用PDO或mysqli_ *。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM