[英]php count function not showing the right count on 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.