データベースからデータをロードする php スクリプトがあります。データをロードしているテーブルのサイズは 50 MB で、現在の PHP メモリ設定では 128 MB が許可されていますが、それでもエラー メッセージが表示されます。
Allowed memory size of 134217728 bytes exhausted (tried to allocate 6 bytes)
いくつかの調査により、php.ini で次のように変更することになりました。
memory_limit = 128M
-1 に変更しました。ドキュメントによると、無限に設定されます。無駄に。
クエリが 50 MB のすべてを返したとしても、制限が 128 MB に設定されているため文句を言うべきではないことは意味がないだけでなく、奇妙なことに、実行するクエリは多くのメモリを必要としません: エコーアウトして実行するとデータベースに直接入力すると、3 行しか返されません。クエリは次のようになります。
SELECT * FROM table WHERE foreign_id=1
その問題を解決する方法を知っている人はいますか?メモリ制限を無限に設定したいと思います。
編集1
まず第一に、ブラウザからではなく、端末からスクリプトを実行することは重要ですか?
次に、php コードは次のとおりです。
//Connect to database
$user="root";
$databasePassword="password";
$host="127.0.0.1";
$database="primarydata";
$identifier=mysql_connect($host,$user,$databasePassword,true);
$db1=mysql_select_db($database);
//Select * from first table
$query="SELECT id,name,city,country FROM table1 WHERE id>=1 ORDER BY id ASC";
$result=mysql_query($query);
$datas=array();
while($row=mysql_fetch_object($result)) $datas[]=(object) $row;
//Loop through artists
for($i=0;$i<sizeof($datas);$i++){
for($j=$i+1;$j<sizeof($datas);$j++){
//This is where the problem occurs
$query="SELECT * FROM table2 WHERE data_id=".$datas[$i]->id;
}
}
第三に、「--enable-memory-limit」を使用する必要がありますか?