Maison > développement back-end > tutoriel php > Conseils sur la technologie de prétraitement MySQL

Conseils sur la technologie de prétraitement MySQL

一个新手
Libérer: 2023-03-16 06:12:01
original
1582 Les gens l'ont consulté

Examinons d’abord la méthode traditionnelle de fonctionnement d’une base de données.

Il existe deux méthodes traditionnelles d'exploitation des bases de données :

  1. Écrivez d'abord une instruction SQL, puis utilisez mysqli->query($sql ) Pour faire fonctionner la base de données (l'auteur utilise ici la bibliothèque d'extension mysqli). Il n’y a rien de mal à cette opération, mais que se passe-t-il si vous souhaitez insérer des milliers ou des dizaines de milliers de données ? Devons-nous encore écrire une instruction SQL comme celle-ci, puis exploiter la base de données ? Ensuite, certaines personnes diront qu'il est plus facile d'utiliser la propre méthode de MySQLi pour faire fonctionner plusieurs instructions SQL, qui est la deuxième méthode.

  2. mysqli->multi_query($sql), C'est la méthode pour faire fonctionner plusieurs instructions SQL, comme suit :

Si vous pensez que cela peut complètement résoudre le problème, alors C'est faux, jetons un coup d'œil au principe de la base de données MySQL exécutant des instructions SQL !

  Comme le montre la figure ci-dessus, que nous envoyions une instruction SQL ou plusieurs instructions SQL, la base de données doit les compiler une par une. Ensuite, lorsque les données atteignent un certain montant, la base de données La base de données. le coût sera énorme. Alors comment résoudre ce problème ? À cette époque, le concept de technologie de prétraitement a été introduit.

Examinons maintenant un morceau de code pour la technologie de prétraitement :

 <?         =  mysqli("localhost", "root", "123456", "student"  (->     ("连接失败" . ->  ->query("set names utf8"  = "insert into student_info(name,age,sex,studentNo,grade) values (?,?,?,?,?)"   = ->prepare(   = "张三"  = 30  = 0;  = "1501222"  = 89 
 ->bind_param("siisd", , , , ,   ->  ->close();
Copier après la connexion

Regardons d'abord

  
  等等,为什么values会是问号呢?这里的问号相当于一个占位符,之后只要向数据库发送数据就能够自动把数据对应的填充进去

  这就是预编译技术的精髓之处,我们通过bind_param,顾名思义,就是绑定参数的意思,那么,它给谁绑定参数呢?看看上面的values (?,?,?,?,?),bind_param里面的参数一一对应

着values的每一个参数。那么bind_param里面的siisd又是什么意思呢?别急,请看下方:

  参数有以下四种类型: 
  i - integer(整型) 
  d - double(双精度浮点型) 
  s - string(字符串) 
  b - BLOB(布尔值) 
  每个参数都需要指定类型。 
  通过告诉数据库参数的数据类型,可以降低 SQL 注入的风险.
Copier après la connexion

 ;Ce code sert à transmettre le données à la base de données.

Interroger la base de données à l'aide de données prétraitées

<span style="color: #000000">  代码如下:<br/>  </span>
Copier après la connexion


<?php/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2017/7/21
 * Time: 9:37 */$mysqli = new mysqli("localhost","root","123456","student");
 if($mysqli->connect_error){    
 die("连接失败".$mysqli->error);
}
$mysqli->query("set names utf8");
$sql="select name,sex,age from student_info where id>?";
$mysqli_stmt=$mysqli->prepare($sql);
$id=1;$mysqli_stmt->bind_param("i",$id);
$mysqli_stmt->execute();//绑定结果集,传递的是引用$mysqli_stmt->bind_result($name,$sex,$age);
while($mysqli_stmt->fetch()){    
    echo "$name--$sex--$age"."<br>";
}//关闭资源$mysqli_stmt->free_result();//关闭预编译语句,否则数据库会一直保存$mysqli_stmt->close();//关闭连接$mysqli->close();
Copier après la connexion
On peut voir que la requête contient plus de code comme

que d'insertion. Alors, que signifie ce code ?

Comme vous pouvez l'imaginer, lors de l'interrogation de la base de données, la base de données renverra inévitablement un ensemble de résultats, donc si vous souhaitez obtenir des données sur le résultat, vous devez ajouter cette phrase. Alors, que signifient ces paramètres ?

Regardez cette instruction SQL, vous constaterez que les paramètres dans bind_result correspondent aux champs (nom, sexe, âge) que vous souhaitez interroger dans l'instruction SQL. Bien sûr, les paramètres de bind_result ne doivent pas nécessairement être les mêmes que les noms de champs de l'instruction SQL, mais nous le recommandons généralement.

Pas grand chose à dire, la photo ci-dessus :

peut se comprendre ainsi : $name, $sex, $age sont passés par référence, ils sont équivalents à des pointeurs, pointez respectivement vers l'adresse de colonne de la première ligne de l'ensemble de résultats. Chaque fois que l'instruction while est exécutée, le pointeur se déplace vers le bas

. De cette façon, les données de chaque ligne peuvent être imprimées. Les résultats sont les suivants :

En même temps, n'oubliez pas ces trois fermetures, elles sont les meilleures. priorité.

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal