버퍼링된 쿼리와 버퍼링되지 않은 쿼리. PHP의 기본 쿼리 모드는 버퍼링 모드입니다. 즉, 쿼리 데이터 결과를 PHP 프로그램에서 처리하기 위해 한꺼번에 메모리에 추출합니다. 필요한 친구가 이를 참조할 수 있습니다.
최근 PHP 프로그램을 개발할 때 다음 오류가 발생했습니다.
PHP 치명적인 오류: 허용 메모리 크기 268 435 456바이트 소진
최대 허용 메모리가 소진되었다는 오류 메시지가 표시됩니다. 처음에는 이런 오류가 발생해서 놀랐지만, 생각해보면 별로 놀라운 일도 아닙니다. 왜냐하면 제가 개발 중인 프로그램은 foreach 루프 문을 사용하여 40,000개의 레코드가 있는 테이블에서 특정 특성을 검색하는 것이기 때문입니다. 즉, 한 번에 40,000개의 데이터를 꺼내야 하고, 일일 데이터를 하나씩 확인해야 합니다. 40,000개의 데이터가 모두 메모리에 로드되면 메모리가 터지지 않으면 이상할 것이라고 생각할 수 있습니다.
결국 프로그래밍을 몇년을 하다보니 PHP가 데이터를 한꺼번에 불러오지 않는 API를 제공한다는게 스트리밍 미디어처럼 사용하고 잃어버릴 수 있는 쿼리 방식이고, 데이터가 쌓이지 않는다는게 어렴풋이 기억나네요. 기억 속에. 간단한 검색 끝에 공식 홈페이지에서 정확한 사용법을 찾았습니다. 버퍼링된 쿼리와 버퍼링되지 않은 쿼리. PHP의 기본 쿼리 모드는 버퍼링 모드입니다. 즉, 쿼리 데이터 결과는 PHP 프로그램에서 처리하기 위해 한꺼번에 메모리로 추출됩니다. 이는 PHP 프로그램에 행 수 계산, 특정 행에 대한 포인터 지정 등과 같은 추가 기능을 제공합니다. 더 중요한 것은 프로그램이 데이터 세트에 대해 2차 쿼리와 필터링 작업을 반복적으로 수행할 수 있다는 것입니다. 그러나 이 버퍼링된 쿼리 모드의 단점은 메모리를 소비한다는 것입니다.
또 다른 PHP 쿼리 모드는 버퍼링되지 않은 쿼리입니다. 데이터베이스 서버는 데이터를 한 번에 모두 반환하지 않고 하나씩 반환합니다. 결과적으로 PHP 프로그램은 메모리를 덜 소비하지만 데이터베이스 서버에 대한 부담을 증가시킵니다. 모든 데이터가 검색될 때까지 PHP가 데이터를 검색할 때까지 기다립니다.
버퍼되지 않은 쿼리 방법 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();
버퍼되지 않은 쿼리 방법 2: 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; } }
버퍼되지 않은 쿼리 방법 3: 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, mysqlqueryday, query이번 주, query이번 달의 자세한 데이터 예
을 구현합니다.
위 내용은 비버퍼링 모드를 사용하여 PHP에서 데이터베이스를 쿼리하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!