如果我在 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["用户 ID"];
2- 适用于不返回任何记录的 sql 语句,例如 UPDATE 或 DELETE。
3-但是当我尝试取回一个返回多条记录的记录集,然后循环遍历它时,我得到一个无限循环并且我的浏览器崩溃了。像这样:
$rs = ExecuteQuery($sql);
while ($row = $rs){
writeme("UserID: " . $row["UserID"]);
}
如何修改我的 while 循环,使其前进到记录集中的每条新记录并在最后一条记录之后停止?我敢肯定这是一个愚蠢的小东西,但我还不是 PHP 专家。我真的很希望我的 ExecuteQuery 函数能够处理所有 3 个场景,它非常方便。