>  기사  >  백엔드 개발  >  PHP에서 mysql로 ​​버퍼를 작동하는 방법

PHP에서 mysql로 ​​버퍼를 작동하는 방법

墨辰丷
墨辰丷원래의
2018-06-12 13:46:011240검색

이 글은 주로 PHP에서의 mysql 연산 버퍼 사용법을 소개하고, mysql 연산 버퍼의 기술을 예제 형식으로 좀 더 자세히 분석합니다. 필요한 친구들이 참고할 수 있습니다.

여기에 있는 예제는 다음과 같습니다. 기사에서는 PHP 버퍼 사용법에서 mysql 작업을 설명합니다. 구체적인 분석은 다음과 같습니다.

php를 mysql, mysql, mysqli, pdo에 연결하는 방법은 3가지가 있습니다. 어떤 방법을 사용하여 연결하든 버퍼를 사용하는 것과 버퍼를 사용하지 않는 것에는 차이가 있습니다.

버퍼를 사용하고 버퍼를 사용하지 않는다는 것은 무슨 뜻인가요?

클라이언트는 mysql 서버로 쿼리 작업을 수행합니다. 쿼리 작업 중에 얻은 데이터의 양이 상대적으로 많은 경우 쿼리 결과를 어디에 배치해야 합니까?

넣는 위치는 클라이언트 버퍼와 서버 버퍼 두 군데입니다.

여기서 말하는 버퍼는 클라이언트의 버퍼를 의미합니다. 쿼리 결과가 서버에서 얻어져 클라이언트의 버퍼에 배치되면 버퍼를 사용하여 호출합니다. 아직 서버 측의 버퍼에 저장되어 있는 경우에는 버퍼(unbuffer)를 사용하지 않는다고 합니다.

버퍼를 사용하는 것과 사용하지 않는 것의 차이점은 무엇인가요?

주로 메모리 측면에서 버퍼를 사용하면 반환된 데이터 결과가 특히 클 경우 클라이언트를 호출하는 비교적 큰 프로세스(실제로는 PHP 프로세스)를 차지할 수 있습니다. 버퍼를 사용하지 않으면 자연스럽게 서버에 더 많은 부담이 가해집니다(여기서는 mysql 서비스를 제공하는 서버에 대해 이야기하고 있습니다).

자세한 내용은 MySQL 대용량 데이터를 쿼리하는 PHP의 메모리 사용량 분석을 참조하세요.

PHP의 세 가지 모드에서 버퍼 사용 여부를 설정하는 방법은 무엇입니까?

mysql의 기본 쿼리는 버퍼를 사용하지 않는 경우 mysql_unbuffer_query를 사용해야 합니다.

mysqli의 기본 쿼리는 버퍼를 사용하지 않으므로 MYSQLI_STORE_RESULT

pdo의 기본 쿼리는 버퍼를 사용하지 않도록 설정해야 합니다. . , 버퍼를 사용하려면 MYSQL_ATTR_USE_BUFFERED_QUERY

관련 코드는 대략 다음과 같습니다.

<?php
$dbConfig = array(
  &#39;host&#39; => &#39;10.128.11.101&#39;,
  &#39;port&#39; => &#39;3306&#39;,
  &#39;user&#39; => &#39;test&#39;,
  &#39;pass&#39; => &#39;test&#39;,
  &#39;db&#39; => &#39;test&#39;,
);
$sql = &#39;select * from so_topic_app&#39;;
//---------mysql----------//
$db = mysql_connect($dbConfig[&#39;host&#39;], $dbConfig[&#39;user&#39;], $dbConfig[&#39;pass&#39;]);
mysql_select_db($dbConfig[&#39;db&#39;], $db);
mysql_set_charset(&#39;utf8&#39;, $db);
// mysql使用buffer
$res = mysql_query($sql, $db);
$data = array();
while($row = mysql_fetch_row($res)) {
  $data[] = $row;
}
// mysql不使用buffer
$res = mysql_unbuffered_query($sql, $db);
$data = array();
while($row = mysql_fetch_row($res)) {
  $data[] = $row;
}
mysql_close($db);
//---------mysqli----------//
$db = mysqli_connect($dbConfig[&#39;host&#39;], $dbConfig[&#39;user&#39;], $dbConfig[&#39;pass&#39;], $dbConfig[&#39;db&#39;]);
// mysqli不使用buffer
$result = mysqli_query($db, $sql);
$data = array();
while($row = $result->fetch_array()) {
  $data[] = $row;
}
// mysqli使用buffer
$result = mysqli_query($db, $sql, MYSQLI_STORE_RESULT);
$data = array();
while($row = $result->fetch_array()) {
  $data[] = $row;
}
mysqli_free_result($result);
mysqli_close($db);
//---------pdo----------//
$dsn = "mysql:dbname={$dbConfig[&#39;db&#39;]};host={$dbConfig[&#39;host&#39;]}";
$pdo = new PDO($dsn, $dbConfig[&#39;user&#39;], $dbConfig[&#39;pass&#39;]);
// pdo不使用buffer
$stmt = $pdo->prepare($sql);
$stmt->execute();
$data = array();
$data = $stmt->fetchAll();
// pdo使用buffer
$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
$stmt = $pdo->prepare($sql);
$stmt->execute();
$data = array();
$data = $stmt->fetchAll();

Follow-up

물론 데이터 양이 매우 많으면 대부분의 사람들은 여전히 ​​사용을 고려할 것입니다. 데이터를 추출하고 처리하는 배치입니다. 따라서 실제로 버퍼 사용 여부에 관계없이 mysql에 주의를 기울이고 사용해야 하는 시나리오는 거의 없습니다.

요약: 위 내용은 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다.

관련 권장 사항:

php는 트랜잭션 제출 및 롤백을 처리합니다.

php 파일 다운로드를 위한 일반적인 처리 방법

PHP 암호화 및 암호 해독 기능은 암호화 및 암호 해독 문자열을 생성합니다

위 내용은 PHP에서 mysql로 ​​버퍼를 작동하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.