Maison > Article > développement back-end > Précompilation et compréhension des instructions mysql en php
Cet article partage principalement avec vous la compréhension de la précompilation des instructions MySQL en PHP. Les instructions de prétraitement sont utilisées pour exécuter plusieurs instructions SQL identiques avec une efficacité d'exécution plus élevée. Les instructions prétraitées fonctionnent comme suit :
Prétraitement : créez un modèle d'instruction SQL et envoyez-le à la base de données. Les valeurs réservées sont marquées du paramètre "?". Par exemple :
INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
Analyse de base de données, compilation, optimisation de requêtes sur des modèles d'instructions SQL et stockage des résultats sans les afficher.
Exécution : Enfin, la valeur liée à l'application est transmise au paramètre (marque "?") et la base de données exécute l'instruction. L'application peut exécuter l'instruction plusieurs fois si les valeurs des paramètres sont différentes.
Par rapport à l'exécution directe d'instructions SQL, les instructions préparées présentent deux avantages principaux :
Les instructions prétraitées réduisent considérablement le temps d'analyse et n'effectuent qu'une seule requête (bien que l'instruction soit exécutée plusieurs fois).
Les paramètres de liaison réduisent la bande passante du serveur, il vous suffit d'envoyer les paramètres de la requête au lieu de l'intégralité de l'instruction.
Les instructions préparées sont très utiles pour l'injection SQL, car différents protocoles sont utilisés après l'envoi des valeurs des paramètres, garantissant la légitimité des données.
Vous trouverez ci-dessous les codes de prétraitement pour les instructions DML (insérer la mise à jour) et DQL (sélectionner)
Prétraitement DML :
//预处理1--操作数据库 $mysqli = new mysqli('localhost','root','mayi1991','mysqldemo'); $mysqli->query('set names utf8'); //创建预编译对象 $mysqli_stmt = $mysqli->prepare("insert account (balance,name) values (?,?)"); //绑定参数 $balance = 122; $name = '小白'; $mysqli_stmt->bind_param("ds",$balance,$name); //$mysqli_stmt->bind_param("ds",122,'小白'); //这样是错误的,我也不知道为啥子 //执行 返回boolean值 $mysqli_stmt->execute();
Prétraitement DQL :
//预处理2--查询数据库 //创建预处理对象 $mysqli_stmt = $mysqli->prepare('select name,balance from account where id < ?'); //绑定参数 $id = 5; $mysqli_stmt->bind_param('i',$id); //执行 $mysqli_stmt->execute(); //绑定结果集 $mysqli_stmt->bind_result($name,$balance); //这里的变量指向的是内存地址 //输出结果集 while($mysqli_stmt->fetch()){ echo "$name--$balance"; }
Recommandations associées :
Introduction détaillée aux instructions MySQL
Méthodes pour implémenter le verrouillage des instructions MySQL
Tutoriel détaillé sur la création de tables de données à l'aide d'instructions MySQL
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!