約7年前に最初のMySQLプロジェクトを開発して以来、データベースにアクセスするために同じ一連の単純な関数を使用してきました(ただし、最近、これらをDatabaseクラスに入れました)。
私が開発するプロジェクトがより複雑になるにつれて、データベースにはより多くのレコードがあり、その結果、メモリの問題が発生する可能性が高くなります。
MySQLの結果セットをループするとPHPエラーが発生Allowed memory size of 67108864 bytes exhausted
し、メモリを大量に使用せずに柔軟性を実現するためのより良い方法があるかどうか疑問に思っていました。
私の関数は次のようになります。
function get_resultset($query) {
$resultset = array();
if (!($result = mysql_unbuffered_query($query))) {
$men = mysql_errno();
$mem = mysql_error();
echo ('<h4>' . $query . ' ' . $men . ' ' . $mem . '</h4>');
exit;
} else {
$xx = 0 ;
while ( $row = mysql_fetch_array ($result) ) {
$resultset[$xx] = $row;
$xx++ ;
}
mysql_free_result($result);
return $resultset;
}
}
次に、クエリを記述し、関数を使用してすべての結果を取得できます。
$query = 'SELECT * FROM `members`';
$resultset = get_resultset($query);
次に、をループして$resultset
結果を表示できます。
$total_results = count($resultset);
for($i=0;$i<$total_results;$i++) {
$record = $resultset[$i];
$firstname = $record['firstname'];
$lastname = $record['lastname'];
// etc, etc display in a table, or whatever
}
結果リストを表示するために各レコードのプロパティにアクセスしながら、結果をループするより良い方法はありますか?
私は似たような問題を抱えている人々を探し回っていますが、与えられた答えは私の状況に合わないか、少し曖昧です。