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- UPDATE や DELETE など、レコードを返さない SQL ステートメントに最適です。
3- しかし、複数のレコードを返すレコードセットを取得しようとして、それをループすると、無限ループが発生し、ブラウザーがクラッシュします。このような:
$rs = ExecuteQuery($sql);
while ($row = $rs){
writeme("UserID: " . $row["UserID"]);
}
while ループを変更して、レコードセット内の新しい各レコードに進み、最後のレコードの後で停止するようにするにはどうすればよいですか? ばかげた小さなことだと確信していますが、私はまだ PHP の専門家ではありません。ExecuteQuery 関数で 3 つのシナリオすべてを処理できるようにしたいと思っています。非常に便利です。