<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 코드 의이 부분은 기사의 내용과 관련이 없습니다.,예를 들어 자리 표시 자</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"이 기사를 읽을 수 있습니다,이 기사는 사용 방법에 대해 논의 할 것입니다mysqli::use_result기능 회피PHP메모리 오버플로 문제。"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
<hr>
</span><span><span class="hljs-meta"><?php</span></span><span>
<span class="hljs-comment">/*
* 통과하는 방법mysqli::use_result기능은 효과적으로 피합니다PHP메모리 오버플로 문제?
*
* 존재하다PHP가운데,사용MySQL데이터베이스시기,쿼리 결과 세트가 큰 경우 메모리 오버플로에 문제가 종종 있습니다.。特别是当사용mysqli큰 결과 세트의 쿼리 실행을 확장합니다,
* 모든 결과가 한 번에 메모리에로드 된 경우,원인이 매우 쉽습니다PHP메모리가 지쳤습니다,프로그램 충돌。
*
* mysqli쿼리 결과를 얻는 두 가지 방법을 제공합니다:store_result()그리고use_result()。
*
* 1. store_result():
* 기본 방법,会将整个结果集一次性取回并缓存존재하다客户端内存가운데。
* 큰 데이터 볼륨의 경우,매우 큰 메모리 소비。
*
* 2. use_result():
* 사용"행 레벨"얻는 방법,한 번에 모든 결과를 검색하지는 않습니다,대신 네트워크를 통해 데이터를 읽으십시오。
* 这样可以显著降低内存사용,메모리 오버플로를 피하십시오。
*
* 本文重点讲解如何合理사용mysqli::use_result()避免메모리 오버플로 문제。
*/</span>
<span class="hljs-comment">/**
* 사용mysqli::use_result샘플 코드
*/</span>
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">'localhost'</span></span><span>, </span><span><span class="hljs-string">'username'</span></span><span>, </span><span><span class="hljs-string">'password'</span></span><span>, </span><span><span class="hljs-string">'database'</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_errno) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"연결이 실패했습니다: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error);
}
</span><span><span class="hljs-comment">// 쿼리를 실행하십시오</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">real_query</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM large_table"</span></span><span>)) {
</span><span><span class="hljs-comment">// 통과하다use_result결과 세트를 가져옵니다,한 번에 많은 양의 데이터를로드하지 마십시오</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">use_result</span></span><span>();
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span>) {
</span><span><span class="hljs-comment">// 데이터 라인별 프로세스,메모리 사용량을 줄입니다</span></span><span>
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">fetch_assoc</span></span><span>()) {
</span><span><span class="hljs-comment">// 각 데이터 행을 처리합니다,예를 들어, 출력 또는 파일에 씁니다</span></span><span>
</span><span><span class="hljs-comment">// echo $row['column_name'] . PHP_EOL;</span></span><span>
}
</span><span><span class="hljs-comment">// 릴리스 결과 세트 리소스</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">free</span></span><span>();
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"결과를 얻지 못했습니다:"</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->error;
}
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"쿼리가 실패했습니다:"</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->error;
}
</span><span><span class="hljs-comment">// 연결을 닫으십시오</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
<span class="hljs-comment">/*
* 자세한 설명:
*
* 1. 스트리밍 독서:
* 사용use_result(),MySQL서버는 결과를 한 번에 클라이언트에게 보내지 않습니다.,대신 연결을 유지하십시오,
* 클라이언트를 라인별로 읽습니다。这样避免了大量数据존재하다内存가운데积累。
*
* 2. 주목해야 할 것:
* - 존재하다사용use_result()시간,모든 결과 또는 통화는 먼저 읽어야합니다free(),그래야만 새 쿼리를 실행할 수 있습니다。
* - 혼합 할 수 없습니다store_result()그리고use_result(),연결 막힘을 피하십시오。
* - 네트워크 연결을 유지해야합니다,读取过程不能가운데断。
*
* 3. 성능 비교:
* 차이store_result(),use_result()일정량의 공연을 희생합니다(여러 네트워크 상호 작용이 필요합니다),
* 但显著减少了内存사용,대규모 데이터 시나리오에 적합합니다。
*
* 4. 해당 시나리오:
* - 쿼리 결과는 매우 큽니다,한 번에로드 할 수 없습니다。
* - 덩어리에서 결과를 처리해야합니다,파일에 쓰는 경우、페이지 매김 수출 등。
*
* 요약:
* 사용mysqli::use_result()스트리밍 쿼리 구현,예, 피하십시오PHP메모리 오버플로를위한 효과적인 전략。
* 개발자는 데이터 라인별로 데이터를 얻을 수 있습니다,降低内存峰值사용,이것은 프로그램 안정성을 향상시킵니다。
*/</span>
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
관련 태그:
mysqli