PHP-MySQL-vorbereitete Anweisungen sind in PHP sehr wichtig. In diesem Artikel erfahren Sie mehr über PHP-MySQL-vorbereitete Anweisungen.
Vorbereitete Anweisungen und gebundene Parameter
Vorbereitete Anweisungen werden verwendet, um mehrere identische SQL-Anweisungen mit höherer Ausführungseffizienz auszuführen.
Vorverarbeitete Anweisungen funktionieren wie folgt:
Vorverarbeitung: Erstellen Sie eine SQL-Anweisungsvorlage und senden Sie sie an die Datenbank. Reservierte Werte werden mit dem Parameter „?“ gekennzeichnet. Zum Beispiel:
INSERT INTO MyGuests (Vorname, Nachname, E-Mail) VALUES(?, ?, ?)
Datenbankanalyse, Kompilierung, Abfrageoptimierung für SQL-Anweisungsvorlagen und Speicherung Das Ergebnis wird nicht ausgegeben.
Ausführung: Schließlich wird der anwendungsgebundene Wert an den Parameter („?“-Markierung) übergeben und die Datenbank führt die Anweisung aus. Die Anwendung kann die Anweisung mehrmals ausführen, wenn die Parameterwerte unterschiedlich sind.
Im Vergleich zur direkten Ausführung von SQL-Anweisungen haben vorbereitete Anweisungen zwei Hauptvorteile:
Vorverarbeitete Anweisungen reduzieren die Analysezeit erheblich und führen nur eine Abfrage durch (obwohl die Anweisung mehrmals ausgeführt wird).
Bindungsparameter reduzieren die Serverbandbreite, Sie müssen nur die Parameter der Abfrage senden und nicht die gesamte Anweisung.
Vorbereitete Anweisungen sind für die SQL-Injection sehr nützlich, da nach dem Senden der Parameterwerte unterschiedliche Protokolle verwendet werden, um die Legitimität der Daten sicherzustellen.
MySQLi-vorbereitete Anweisungen
Die folgenden Beispiele verwenden vorbereitete Anweisungen in MySQLi und binden entsprechende Parameter:
Beispiele (MySQLi verwendet vorbereitete Anweisungen)
<?php$servername = "localhost";$username = "username";$password = "password";$dbname = "myDB"; // 创建连接$conn = new mysqli($servername, $username, $password, $dbname); // 检测连接if ($conn->connect_error) { die("连接失败: " . $conn->connect_error);} // 预处理及绑定$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");$stmt->bind_param("sss", $firstname, $lastname, $email); // 设置参数并执行$firstname = "John";$lastname = "Doe";$email = "john@example.com";$stmt->execute(); $firstname = "Mary";$lastname = "Moe";$email = "mary@example.com";$stmt->execute(); $firstname = "Julie";$lastname = "Dooley";$email = "julie@example.com";$stmt->execute(); echo "新记录插入成功"; $stmt->close();$conn->close();?>
Parst jedes Codezeile für das folgende Beispiel:
"INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)"
in einer SQL-Anweisung haben wir das Fragezeichen verwendet (?), wobei wir das Fragezeichen durch eine Ganzzahl, einen String , einen Double Float und einen Booleschen Wert ersetzen können.
Als nächstes werfen wir einen Blick auf die Funktion bind_param():
$stmt->bind_param("sss", $firstname, $lastname, $email);
Diese Funktion bindet SQL-Parameter und teilt der Datenbank den Wert der Parameter mit. Die Parameterspalte „sss“ verwaltet den Datentyp der übrigen Parameter. Das s-Zeichen teilt der Datenbank mit, dass es sich bei dem Parameter um eine Zeichenfolge handelt.
Die Parameter haben die folgenden vier Typen:
i – Integer (Ganzzahltyp)
d – double (Gleitkommatyp mit doppelter Genauigkeit)
s - string (string)
b - BLOB (binäres großes Objekt: binäres großes Objekt)
Jeder Parameter muss den Typ angeben.
Sie können das Risiko einer SQL-Injection reduzieren, indem Sie der Datenbank den Datentyp des Parameters mitteilen.
Hinweis: Wenn Sie andere Daten (Benutzereingaben) einfügen möchten, ist die Validierung der Daten sehr wichtig.
Vorbereitete Anweisungen in PDO
In den folgenden Beispielen verwenden wir vorbereitete Anweisungen und Bindungsparameter in PDO:
Beispiele (PDO verwendet vorbereitete Anweisungen)
<?php$servername = "localhost";$username = "username";$password = "password";$dbname = "myDBPDO"; try { $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); // 设置 PDO 错误模式为异常 $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 预处理 SQL 并绑定参数 $stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (:firstname, :lastname, :email)"); $stmt->bindParam(':firstname', $firstname); $stmt->bindParam(':lastname', $lastname); $stmt->bindParam(':email', $email); // 插入行 $firstname = "John"; $lastname = "Doe"; $email = "john@example.com"; $stmt->execute(); // 插入其他行 $firstname = "Mary"; $lastname = "Moe"; $email = "mary@example.com"; $stmt->execute(); // 插入其他行 $firstname = "Julie"; $lastname = "Dooley"; $email = "julie@example.com"; $stmt->execute(); echo "新记录插入成功";}catch(PDOException $e){ echo "Error: " . $e->getMessage();}$conn = null;?>
In diesem Artikel werden die relevanten Kenntnisse der PHP-MySQL-Vorverarbeitungsanweisungen ausführlich erläutert. Weitere Lernmaterialien finden Sie auf der chinesischen PHP-Website.
Verwandte Empfehlungen:
So fügen Sie mehrere Daten über PHP MySQL ein
So fügen Sie Daten über PHP MySQL ein
So erstellen Sie eine MySQL-Tabelle mit PHP
Das obige ist der detaillierte Inhalt vonVerwandte Kenntnisse über vorbereitete PHP- und MySQL-Anweisungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!