Maison > Article > base de données > Explication détaillée de l'utilisation de préparer, d'exécuter et de désallouer dans MySQL
préparer, exécuter et désallouer sont toutes des instructions de prétraitement dans MySQL Cet article présente principalement le didacticiel d'utilisation de préparer, d'exécuter et de désallouer dans MySQL. L'article le présente en détail à travers un exemple de code. valeur d'apprentissage de référence pour que tout le monde puisse apprendre ou utiliser MySQL. Les amis qui en ont besoin peuvent suivre l'éditeur pour apprendre ensemble.
Tutoriels vidéo MySQL recommandés : "Tutoriel MySQL"
Avant-propos
MySQL fait officiellement référence à la préparation, à l'exécution et à la désallocation sous le nom de PREPARE STATEMENT. J'ai l'habitude de l'appeler [instruction de prétraitement]. Son utilisation est très simple. Je n'entrerai pas dans les détails ci-dessous.
Exemple de code
PREPARE stmt_name FROM preparable_stmt EXECUTE stmt_name [USING @var_name [, @var_name] ...] - {DEALLOCATE | DROP} PREPARE stmt_name
Par exemple :
mysql> PREPARE pr1 FROM 'SELECT ?+?'; Query OK, 0 rows affected (0.01 sec) Statement prepared mysql> SET @a=1, @b=10 ; Query OK, 0 rows affected (0.00 sec) mysql> EXECUTE pr1 USING @a, @b; +------+ | ?+? | +------+ | 11 | +------+ 1 row in set (0.00 sec) mysql> EXECUTE pr1 USING 1, 2; -- 只能使用用户变量传递。 ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1, 2' at line 1 mysql> DEALLOCATE PREPARE pr1; Query OK, 0 rows affected (0.00 sec)
L'utilisation de PAREPARE STATEMENT peut réduire l'analyse syntaxique à chaque fois que vous exécutez SQL. Par exemple, si vous l'utilisez pour exécuter SELECT et DELETE avec des conditions WHERE, ou UPDATE, ou INSERT, il vous suffit de modifier la valeur de la variable à chaque fois.
peut également empêcher l'injection SQL, et les valeurs des paramètres peuvent contenir des caractères d'échappement et des délimiteurs.
Applicable aux applications ou aux scripts SQL.
Plus d'utilisation :
De même, PREPARE... FROM peut connecter directement les variables utilisateur :
mysql> CREATE TABLE a (a int); Query OK, 0 rows affected (0.26 sec) mysql> INSERT INTO a SELECT 1; Query OK, 1 row affected (0.04 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> INSERT INTO a SELECT 2; Query OK, 1 row affected (0.04 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> INSERT INTO a SELECT 3; Query OK, 1 row affected (0.04 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> SET @select_test = CONCAT('SELECT * FROM ', @table_name); Query OK, 0 rows affected (0.00 sec) mysql> SET @table_name = 'a'; Query OK, 0 rows affected (0.00 sec) mysql> PREPARE pr2 FROM @select_test; Query OK, 0 rows affected (0.00 sec) Statement prepared mysql> EXECUTE pr2 ; +------+ | a | +------+ | 1 | | 2 | | 3 | +------+ 3 rows in set (0.00 sec) mysql> DROP PREPARE pr2; -- 此处DROP可以替代DEALLOCATE Query OK, 0 rows affected (0.00 sec)
Chaque fois après avoir exécuté EXECUTE, développez une bonne habitude et exécutez l'instruction DEALLOCATE PREPARE..., qui peut libérer toutes les ressources de base de données (telles que les curseurs) utilisées dans l'exécution.
De plus, si une session contient trop d'instructions préparées, la limite supérieure de max_prepared_stmt_count peut être atteinte.
Les déclarations préparées ne peuvent être utilisées que dans la session du créateur et ne peuvent pas être utilisées dans d'autres sessions.
Et lorsque vous quittez la session de quelque manière que ce soit (normale ou anormale), les instructions préparées précédemment définies n'existeront plus.
Si elle est utilisée dans une procédure stockée, si elle n'est pas DEALLOCATEd dans la procédure, l'instruction préparée sera toujours valide après la fin de la procédure stockée.
Recommandations associées :
Utilisation d'instructions préparées pour démarrer avec MySQL
php_pdo Explication détaillée des instructions préparées
Deux exemples de codes d'instructions de prétraitement php Mysqli
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!