이 글은 주로 PHP에서 대용량 데이터를 쿼리할 때 발생하는 메모리 소모 문제에 대한 해결 방법을 자세히 소개하고 있습니다. 관심 있는 친구들이 참고하면 좋을 것 같습니다. Tip
:PHP 치명적인 오류: 허용되는 메모리 크기는 268 435 456바이트입니다.
공식 PHP 웹사이트에서는 이 문제를 버퍼링된 쿼리와 버퍼링되지 않은 쿼리라고 합니다. PHP의 기본 쿼리 모드는 버퍼링 모드입니다. 즉, 쿼리 데이터 결과는 PHP 프로그램에서 처리하기 위해 한꺼번에 메모리로 추출됩니다. 이는 PHP 프로그램에 행 수 계산, 특정 행에 대한 포인터 지정 등과 같은 추가 기능을 제공합니다. 더 중요한 것은 프로그램이 데이터 세트에 대해 2차 쿼리와 필터링 작업을 반복적으로 수행할 수 있다는 것입니다. 그러나 이 버퍼링된 쿼리 모드의 단점은 메모리를 소비한다는 것, 즉 속도를 위해 공간을 교환한다는 것입니다.
반면에 또 다른 PHP 쿼리 모드는 버퍼링되지 않은 쿼리입니다. 데이터베이스 서버는 데이터를 한 번에 모두 반환하지 않고 하나씩 반환합니다. 결과적으로 PHP 프로그램은 메모리를 덜 소비하지만 데이터베이스에 대한 부담을 증가시킵니다. server. 데이터베이스는 모든 데이터를 가져올 때까지 PHP가 데이터를 가져올 때까지 기다리기 때문입니다.
분명히 버퍼링된 쿼리 모드는 작은 데이터 볼륨 쿼리에 적합하고, 버퍼링되지 않은 쿼리 모드는 큰 데이터 볼륨 쿼리에 적합합니다.
PHP의 버퍼 모드 쿼리에 대해서는 누구나 알고 있습니다. 아래 예제는 버퍼되지 않은 쿼리 API를 실행하는 방법입니다.
버퍼되지 않은 쿼리 방법 1:mysqli
<?php $mysqli = new mysqli("localhost", "my_user", "my_password", "world"); $uresult = $mysqli->query("SELECT Name FROM City", MYSQLI_USE_RESULT); if ($uresult) { while ($row = $uresult->fetch_assoc()) { echo $row['Name'] . PHP_EOL; } } $uresult->close(); ?>
pdo_mysql
<?php $pdo = new PDO("mysql:host=localhost;dbname=world", 'my_user', 'my_pass'); $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); $uresult = $pdo->query("SELECT Name FROM City"); if ($uresult) { while ($row = $uresult->fetch(PDO::FETCH_ASSOC)) { echo $row['Name'] . PHP_EOL; } } ?>
mysql
<?php $conn = mysql_connect("localhost", "my_user", "my_pass"); $db = mysql_select_db("world"); $uresult = mysql_unbuffered_query("SELECT Name FROM City"); if ($uresult) { while ($row = mysql_fetch_assoc($uresult)) { echo $row['Name'] . PHP_EOL; } } ?>
위 내용은 이 글의 전체 내용이므로, 모든 분들의 학습에 도움이 되기를 바랍니다.
관련 권장사항:
위 내용은 PHP에서 대량의 데이터를 쿼리할 때 메모리 소모 문제에 대한 해결 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!