Heim  >  Artikel  >  Datenbank  >  Tutorial zur Verwendung vorbereiteter Anweisungen zum Vorbereiten, Ausführen und Freigeben in MySQL

Tutorial zur Verwendung vorbereiteter Anweisungen zum Vorbereiten, Ausführen und Freigeben in MySQL

黄舟
黄舟Original
2017-08-23 13:45:021909Durchsuche

Dieser Artikel stellt hauptsächlich das Tutorial zur Verwendung vorbereiteter Anweisungen zum Vorbereiten, Ausführen und Freigeben in MySQL vor. Freunde in Not können sich darauf beziehen

MySQL bezeichnet das Vorbereiten, Ausführen und Freigeben von Anweisungen offiziell als PREPARE STATEMENT.
Ich bin es gewohnt, es [vorverarbeitete Anweisungen] zu nennen.

Die Verwendung ist sehr einfach,


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 nur Änderungen vornehmen den Variablenwert jedes Mal.
Es kann auch SQL-Injection verhindern. Parameterwerte können Escape-Zeichen und Trennzeichen enthalten.

Gilt für Anwendungen oder SQL-Skripte.

Weitere Verwendungen:

Ebenso 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)

Every When Wenn EXECUTE einmal ausgeführt wird, ist es eine gute Angewohnheit, die DEALLOCATE PREPARE...-Anweisung auszuführen, 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.

Zusammenfassung

Das obige ist der detaillierte Inhalt vonTutorial zur Verwendung vorbereiteter Anweisungen zum 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