function selecttest() { try { $pdo = new PDO("mysql:host=localhost;dbname=test", 'root', '123456'); // 不使用缓存结果集方式 // $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); $sth = $pdo->prepare('select * from test'); $sth->execute(); echo '最初占用内存大小:' . memory_get_usage() . "\n"; $i = 0; while ($result = $sth->fetch(PDO::FETCH_ASSOC)) { $i += 1; if ($i > 10) { break; } sleep(1); print_r($result); echo '占用内存大小:' . memory_get_usage() . "\n"; } } catch (Exception $e) { echo $e->getMessage(); } }위는 모든 결과를 캐시합니다. 설정 모드에서 이 기능을 실행하면 아래와 같이 과도한 메모리 오류가 보고됩니다.
0.0005 135568 2. test-> selecttest() E:ProgramDevelopmentRuntimeEnvironmentxampphtdocstesttest.php:86
0.0055 142528 3. PDOStatement->execute() E:ProgramDevelopmentRuntimeEnvironmentxampphtdocstesttest.php:57
Array ( [id] => 1 [a] => v [b] => w [c] => i )점유 메모리 크기: 145544
Array ( [id] => 2 [a] => b [b] => l [c] => q )점유 메모리 크기: 145544
Array ( [id] => 3 [a] => m [b] => p [c] => h )점유 메모리 크기: 145536
Array ( [id] => 4 [a] => j [b] => i [c] => b )메모리 점유 크기: 145536
Array ( [id] => 5 [a] => q [b] => g [c] => g )메모리 점유 크기: 145536당신 결과 세트를 캐싱하여 결과 행을 얻는 데 사용되는 메모리가 매우 작다는 것을 알 수 있습니다. 이렇게 하면 메모리 제한을 초과하는 문제가 해결됩니다. 읽어주셔서 감사합니다. 더 많은 관련 내용을 알고 싶으시다면 PHP 중국어 홈페이지(www.php.cn)를 주목해주세요!