Maison  >  Article  >  développement back-end  >  Comment faire fonctionner le tampon avec MySQL en PHP

Comment faire fonctionner le tampon avec MySQL en PHP

墨辰丷
墨辰丷original
2018-06-12 13:46:011245parcourir

Cet article présente principalement l'utilisation du fonctionnement du tampon mysql en php et analyse en détail les techniques de fonctionnement du tampon mysql sous forme d'exemples. Il a une certaine valeur de référence. Les amis dans le besoin peuvent se référer aux exemples de cet article. 🎜>

Décrit l'utilisation du tampon d'opération mysql en php. L'analyse spécifique est la suivante :

Il existe trois façons de connecter php à mysql, mysql, mysqli et pdo. Quelle que soit la méthode utilisée pour se connecter, il existe une différence entre utiliser un tampon et ne pas utiliser de tampon.

Que signifie utiliser buffer et ne pas utiliser buffer ?

Le client effectue des opérations de requête avec le serveur mysql. Si la quantité de données obtenues lors de l'opération de requête est relativement importante, où doivent être placés les résultats de la requête ?

Il y a deux endroits pour le mettre : le buffer du client et le buffer du serveur.

Le tampon dont nous parlons ici fait référence au tampon du client. Si les résultats de la requête ont été obtenus du serveur et placés dans le tampon du client, nous l'appelons en utilisant le tampon. S'il est toujours stocké dans le buffer côté serveur, on dit que le buffer (unbuffer) n'est pas utilisé.

Quelle est la différence entre utiliser un tampon et ne pas l'utiliser ?

Principalement en termes de mémoire, l'utilisation d'un tampon augmentera la pression mémoire du client. Lorsque le résultat des données renvoyées est particulièrement volumineux, il peut occuper un processus relativement volumineux qui appelle le client (en fait un PHP). processus). Ne pas utiliser de tampon mettra naturellement plus de pression sur le serveur (nous parlons ici du serveur qui fournit le service MySQL).

Pour plus de détails, veuillez vous référer à : Analyse de l'utilisation de la mémoire de PHP interrogeant MySQL de grandes quantités de données

Comment définir s'il faut utiliser le tampon dans les trois modes en PHP ?

La requête par défaut de MySQL utilise le tampon. Si vous n'utilisez pas de tampon, vous devez utiliser mysql_unbuffer_query

La requête par défaut de MySQL n'utilise pas de tampon Pour utiliser le tampon, vous devez définir MYSQLI_STORE_RESULT.

La requête par défaut de pdo n'utilise pas de buffer. Pour utiliser buffer, vous devez définir MYSQL_ATTR_USE_BUFFERED_QUERY

Le code pertinent est le suivant :

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

Suivi

Bien sûr, si la quantité de données est très importante, la plupart des gens envisageront toujours d'utiliser des lots pour extraire et traiter les données. Il existe donc très peu de scénarios qui nécessitent que nous y prêtions attention et que nous utilisions MySQL, que nous utilisions ou non un tampon.

Résumé : Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.

Recommandations associées :

Traitement PHP de la soumission et de l'annulation des transactions

Méthodes de traitement courantes de PHP pour les téléchargements de fichiers

La fonction de cryptage et de décryptage PHP génère des chaînes cryptées et déchiffrées

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn