php中mysql操作buffer用法詳解

2022-10-06 10:51:13 字數 2603 閱讀 5948

php與mysql的連線有三種方式,mysql,mysqli,pdo。不管使用哪種方式進行連線,都有使程式設計客棧用buffer和不使用buffer的區別。

什麼叫使用buffer和不使用buffer呢?

客戶端與mysql服務端進行查詢操作,查詢操作的時候如果獲取的資料量比較大,那個這個查詢結果放在**呢?

有兩個地方可以放:客戶端的緩衝區和服務端的緩衝區。

我們這裡說的buffer指的是客戶端的緩衝區,如果查詢結果已經從服務端獲取回來了,放置在了客戶端的緩衝區,我們就稱之為使用buffer。如果還是存放在服務端的緩衝區的話,我們就說沒有使用buffer(unbuffer)。

使用buffer和不使用buffer有什麼區別?

主要在記憶體方面,使用buffer會增加客戶端的記憶體壓力,當返回的資料結果特別大的時候可能會占用呼叫客戶端(實際就是乙個php程序)比較大的程序。不使用buffer自然對服務端(這裡說的是提供mysql服務的伺服器)壓力更大。

具體可以參考:php查詢mysql大量資料的記憶體占用分析

php中三種模式是如何設定是否使用buffer的?

mysql預設的query是使用buffer的,而不使用buffer就需要使用mysql_unbuffer_query

mysqli預設的query是不使用buffer的,要使用buffer就需要設定mysqli_store_result

pdo預設的quey是不使用buffer的,要使用buffer就需要設定mysql_attr_use_buffered_query

大致相關**如下:

<?php $dbconfig = array(

'host' => '10.128.11.101',

'port' => '3306',

'user' => 'test',

'pass' => 'test',

'db' => 'test',

);$sql = 'select * from so_topic_app';

//--------

$db = mysql_connect($dbconfig['host'], $dbconfig['user'], $dbconfig['pass']);

mysql_select_db($dbconfig['db'], $db);

mysql_set_charset('utf8', $db);

// mysql使用buffer

$res = mysql_query($sql, $db);

$data = arxnholvpbnray();

while($row = mysql_fetch_row($res))

// mysql不使用buffer

$res = mysql_unbuffered_query($sql, $db);

$data = array();

while($row = mysql_fetch_row($res))

mysql_close($db);

//---------mysqli----------//

$db = mysqli_connect($dbconfig['host'], $dbconfig['user'], $dbconfig['pass'], $dbconfig['db']);

// mysqli不使用buffer

$result = mysqli_query($db, $sql);

$data = array();

while($row = $result->fetch_array())

// mysqli使用buffer

$result = mysqli_query($db, $sql, mysqli_store_result);

$data = array();

while($row = $result->fetch_array())

mysqli_free_result($result);

mysqli_close($db);

//---------pdo----------//

$dsn = "mysql:dbname=;host=";

$pdo = new pdo($dsn, $dbconfig['user'], $dbconfig['pass']);

// 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();

後續當然如果資料量非常大的話,大部分人還是會考慮使用分批次來提取和處理資料。所以實際上需要我們關注和使用mys程式設計客棧是使用buffer還是不使用buffer的場景非常少。

本文標題: php中mysql操作buffer用法詳解

本文位址:

php中的mysql操作詳解

接下來為大家帶來這幾天學習php與mysql的一些知識心得,非常實用也非常具體,涵蓋了所有常用的php中mysql的內建方法。資料庫連線 mysql connect localhost root root 三個引數分別為資料庫位址 資料庫使用者名稱和密碼 設定mysql 鏈結識別符號 con mys...

php中mysql函式 php中mysql有關函式

1.mysql query 一般是用來查詢資料裡面的資料。如 username post name sql select from members where login name username result mysql query sql 以上程式是檢測資料庫中是否存在表單傳送過來的使用者名稱...

PHP操作Mysql中的BLOB欄位

1 mysql中blob欄位型別 blob型別的字段用於儲存二進位制資料。mysql中,blob是個型別系列,包括 tinyblob blob mediumblob longblob,這幾個型別之間的唯一區別是在儲存檔案的最大大小上不同。mysql的四種blob型別 tinyblob 最大 255位...