Heim  >  Artikel  >  Datenbank  >  Ausführliche Erläuterung der Verwendung von „Vorbereiten“, „Ausführen“ und „Freigeben“ in MySQL

Ausführliche Erläuterung der Verwendung von „Vorbereiten“, „Ausführen“ und „Freigeben“ in MySQL

小云云
小云云Original
2017-12-22 13:48:4010226Durchsuche

Vorbereiten, Ausführen und Freigeben sind alles Vorverarbeitungsanweisungen in MySQL. In diesem Artikel wird die Verwendung von Vorbereiten, Ausführen und Freigeben im Detail anhand von Beispielcode vorgestellt Referenz-Lernwert für alle zum Erlernen oder Verwenden von MySQL. Freunde, die es benötigen, können dem Editor folgen, um gemeinsam zu lernen.

Empfohlene MySQL-Video-Tutorials: „MySQL-Tutorial

Vorwort

MySQL Offiziell wird die Bezeichnung „Vorbereiten“, „Ausführen“ und „Freigeben“ als „Vorbereitungsanweisung“ bezeichnet. Ich werde im Folgenden nicht näher darauf eingehen.

Beispielcode

PREPARE stmt_name FROM preparable_stmt

EXECUTE stmt_name
 [USING @var_name [, @var_name] ...] -

{DEALLOCATE | DROP} PREPARE stmt_name

Zum Beispiel:

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)

Die Verwendung von PAREPARE STATEMENT kann die Syntaxanalyse bei jeder Ausführung von SQL reduzieren. Wenn Sie es beispielsweise zum Ausführen von SELECT und DELETE mit WHERE-Bedingungen oder UPDATE oder INSERT verwenden, müssen Sie jedes Mal nur den Variablenwert ändern.

kann auch SQL-Injection verhindern und Parameterwerte können Escape-Zeichen und Trennzeichen enthalten.

Gilt für Anwendungen oder SQL-Skripte.

Mehr Verwendung:

Ähnlich kann PREPARE... FROM Benutzervariablen direkt verbinden:

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)

Entwickeln Sie jedes Mal nach der Ausführung von EXECUTE eine gute Angewohnheit und führen Sie die DEALLOCATE PREPARE...-Anweisung aus, die alle bei der Ausführung verwendeten Datenbankressourcen (z. B. Cursor) freigeben kann.

Nicht nur das: Wenn eine Sitzung zu viele vorbereitete Anweisungen enthält, kann die Obergrenze von max_prepared_stmt_count erreicht werden.

Vorbereitete Anweisungen können nur in der Sitzung des Erstellers und nicht in anderen Sitzungen verwendet werden.

Und wenn Sie die Sitzung auf irgendeine Weise (normal oder abnormal) verlassen, sind die zuvor definierten vorbereiteten Anweisungen nicht mehr vorhanden.

Bei Verwendung in einer gespeicherten Prozedur ist die vorbereitete Anweisung auch nach dem Ende der gespeicherten Prozedur noch gültig, wenn sie in der Prozedur nicht freigegeben wird.

Verwandte Empfehlungen:

Verwenden vorbereiteter Anweisungen für den Einstieg in MySQL

php_pdo Detaillierte Erläuterung vorbereiteter Anweisungen

Zwei Beispielcodes für PHP-Mysqli-Vorverarbeitungsanweisungen

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Verwendung von „Vorbereiten“, „Ausführen“ und „Freigeben“ in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn