1

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 つのシナリオすべてを処理できるようにしたいと思っています。非常に便利です。

4

3 に答える 3

1

foreach($rs as $row){代わりに試してくださいwhile ($row = $rs){

于 2012-09-19T20:43:44.750 に答える
0

while は使用せず、foreach を使用します。

$rs = ExecuteQuery($sql);
foreach ($rs as $row){
    writeme("UserID: " . $row["UserID"]);
}
于 2012-09-19T20:44:09.607 に答える
0

mysql_fetch_assoc() は結果の 1 行のみを返します。次の行を取得するには、mysql_fetch_assoc() を再度呼び出す必要があります。できることの 1 つは、ExecuteQuery 関数で配列の配列を返すことです。

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

また、mysql_* 関数は非推奨であるため、使用しないでください。代わりに PDO または mysqli_* を使用してみてください。

于 2012-09-19T20:52:56.303 に答える