ホームページ  >  記事  >  バックエンド開発  >  php_PHP チュートリアルでの mysql 操作バッファの使用方法の詳細な説明

php_PHP チュートリアルでの mysql 操作バッファの使用方法の詳細な説明

WBOY
WBOYオリジナル
2016-07-13 10:02:10869ブラウズ

phpでのmysql操作バッファの使用法の詳細な説明

この記事は主にphpでのmysql操作バッファの使用法を紹介し、例の形でmysql操作バッファのスキルをより詳細に分析します。価値のある人や困っている友達はそれを参照してください

この記事の例では、php での mysql 操作バッファの使用法について説明します。皆さんの参考に共有してください。具体的な分析は次のとおりです:

php を mysql に接続するには、mysql、mysqli、pdo の 3 つの方法があります。どの方法で接続する場合でも、バッファを使用する場合と使用しない場合には違いがあります。

バッファを使用する、およびバッファを使用しないとはどういう意味ですか?

クライアントは mysql サーバーでクエリ操作を実行します。クエリ操作中に取得したデータの量が比較的大きい場合、クエリ結果はどこに配置されるべきですか?

それを置く場所は 2 つあります: クライアントのバッファーとサーバーのバッファーです。

ここで話しているバッファは、クエリ結果がサーバーから取得され、クライアントのバッファに配置されている場合、そのバッファを使用して呼び出します。サーバー側のバッファにまだ格納されている場合、バッファが使用されていない(アンバッファ)と言います。

バッファを使用する場合と使用しない場合の違いは何ですか?

主にメモリの点で、バッファを使用するとクライアントのメモリ負荷が増加します。返されるデータ結果が特に大きい場合、クライアントを呼び出す比較的大きなプロセス (実際には PHP プロセス) を占有する可能性があります。バッファを使用しないと、当然サーバーへの負荷が高くなります (ここでは、mysql サービスを提供するサーバーについて話しています)。

詳細については、MySQL 大量データをクエリする PHP のメモリ使用量分析を参照してください

PHPの3つのモードでバッファを使用するかどうかを設定するにはどうすればよいですか?

Mysql のデフォルトのクエリはバッファを使用します。バッファを使用しない場合は、mysql_unbuffer_query を使用する必要があります

mysqliのデフォルトクエリはバッファを使用しません。バッファを使用するには、MYSQLI_STORE_RESULTを設定する必要があります。

PDO のデフォルトのクエリはバッファを使用しません。バッファを使用するには、MYSQL_ATTR_USE_BUFFERED_QUERY を設定する必要があります。

関連するコードはおおよそ次のとおりです:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

$dbConfig = array(

'ホスト' => '10.128.11.101',

'ポート' => '3306',

'ユーザー' => 'テスト',

'パス' => 'テスト',

'db' => 'テスト',

);

$sql = 'select * from so_topic_app';

//----------mysql----------//

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

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

mysql_set_charset('utf8', $db);

//mysqlはバッファを使用します

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

$data = 配列();

while($row = mysql_fetch_row($res)) {

$data[] = $row;

}

//mysql はバッファを使用しません

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

$data = 配列();

while($row = mysql_fetch_row($res)) {

$data[] = $row;

}

mysql_close($db);

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

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

//mysqli はバッファを使用しません

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

$data = 配列();

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

$data[] = $row;

}

// mysqli使用バッファ

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

$data = 配列();

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

$data[] = $row;

}

mysqli_free_result($result);

mysqli_close($db);

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

$dsn = "mysql:dbname={$dbConfig['db']};host={$dbConfig['host']}";

$pdo = 新しい PDO($dsn, $dbConfig['user'], $dbConfig['pass']);

// pdo バッファーを使用しません

$stmt = $pdo->prepare($sql);

$stmt->execute();

$data = 配列();

$data = $stmt->fetchAll();

// pdo使用バッファ

$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);

$stmt = $pdo->prepare($sql);

$stmt->execute();

$data = 配列();

$data = $stmt->fetchAll();

後续

当然のことながら、データ量が非常に大きい場合、データの抽出と処理にバッチの使用を検討する人も多いため、バッファを使用するか、バッファを使用しないで mysql を使用するかが非常に重要です。

ここで説明されている大家向けの php プログラムの設計が役立つことを望みます。

http://www.bkjia.com/PHPjc/970758.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/970758.html技術記事 php中mysql操作バッファ用法详解この項文章主介绍了php中mysql操作バッファ用法、例として较细の分析了mysql操作バッファの技術巧、一定の参照借鉴...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。