Aktueller Standort: Startseite> Neueste Artikel> Erste Schritte mit Zero Foundation: So erstellen Sie Vorverarbeitungsanweisungen über MySQLI_STMT :: __ Konstrukt

Erste Schritte mit Zero Foundation: So erstellen Sie Vorverarbeitungsanweisungen über MySQLI_STMT :: __ Konstrukt

gitbox 2025-09-16

1. Was sind Vorverarbeitungsaussagen?

Vorverarbeitungsanweisungen sind eine Ausführung von SQL -Abfragen. Es unterteilt SQL -Abfragen in zwei Teile:

  • Vorverarbeitungsphase : Senden Sie die Vorlage der SQL -Anweisung an die Datenbank, und die Datenbank analysiert und erstellt die SQL -Anweisung, führt jedoch nicht die Abfrage aus. Zu diesem Zeitpunkt wird der variable Teil in der Abfrage (z. B. was der Benutzereingang) nicht sofort in die SQL eingefügt, sondern als Platzhalter dargestellt (normalerweise ? ).

  • Ausführungsphase : Während der Ausführung ist der tatsächliche Parameterwert verpflichtet, den Platzhalter zu ersetzen, und die Datenbank führt die Anweisung aus.

Der Vorteil dieses Ansatzes besteht darin, dass die Datenbank Abfragen im Voraus erstellen und die Parameter jeder Abfrage sicher überprüfen kann, wodurch das Risiko einer SQL -Injektion vermieden wird.


2. Erstellen Sie eine Vorverarbeitungsanweisung mit MySQLI_STMT :: __ Konstrukt

In PHP bedienen wir die MySQL -Datenbank über die MySQLi -Erweiterung, und MySQLI_STMT :: __ Konstrukt ist ein Konstruktor der MySQLi_stmt -Klasse, die zum Erstellen einer Vorverarbeitungsanweisung verwendet wird.

Schrittübersicht:

  1. Stellen Sie eine Datenbankverbindung fest : Erstens müssen Sie MySQLI_Connect oder New MySQLI () verwenden, um eine Datenbankverbindung zu erstellen.

  2. Bereiten Sie SQL -Anweisungen vor : Definieren Sie SQL -Anweisungen mit Platzhaltern.

  3. Vorverarbeitungsanweisungen initialisieren : Erstellen Sie Vorverarbeitungsanweisungen mit MySQLI_Prepare oder MySQLi_stmt :: __ Construct .

  4. Bind -Parameter : Verwenden Sie die Methode Bind_param , um Variablenwerte an Platzhalter in Vorverarbeitungsanweisungen zu binden.

  5. Ausführungsanweisung : Verwenden Sie die Ausführungsmethode , um die Vorverarbeitungsanweisung auszuführen.


3. Beispielcode

Nehmen wir an, wir möchten Benutzerdaten in eine Benutzertabelle einfügen, einschließlich Name, E -Mail und Alter. Wir verwenden MySQLI_STMT :: __ Konstrukt , um eine Vorverarbeitungsanweisung zu erstellen. Hier ist ein bestimmtes Code -Beispiel:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 1. Erstellen Sie eine Datenbankverbindung</span></span><span>
</span><span><span class="hljs-variable">$servername</span></span><span> = </span><span><span class="hljs-string">"localhost"</span></span><span>;
</span><span><span class="hljs-variable">$username</span></span><span> = </span><span><span class="hljs-string">"root"</span></span><span>;
</span><span><span class="hljs-variable">$password</span></span><span> = </span><span><span class="hljs-string">""</span></span><span>;
</span><span><span class="hljs-variable">$dbname</span></span><span> = </span><span><span class="hljs-string">"test"</span></span><span>;

</span><span><span class="hljs-variable">$conn</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-variable">$servername</span></span><span>, </span><span><span class="hljs-variable">$username</span></span><span>, </span><span><span class="hljs-variable">$password</span></span><span>, </span><span><span class="hljs-variable">$dbname</span></span><span>);

</span><span><span class="hljs-comment">// Überprüfen Sie die Verbindung</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$conn</span></span><span>-&gt;connect_error) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Connection failed: "</span></span><span> . </span><span><span class="hljs-variable">$conn</span></span><span>-&gt;connect_error);
}

</span><span><span class="hljs-comment">// 2. Platzhalter definieren SQL Stellungnahme</span></span><span>
</span><span><span class="hljs-variable">$sql</span></span><span> = </span><span><span class="hljs-string">"INSERT INTO users (name, email, age) VALUES (?, ?, ?)"</span></span><span>;

</span><span><span class="hljs-comment">// 3. 创建预处理Stellungnahme</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$conn</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-variable">$sql</span></span><span>);

</span><span><span class="hljs-comment">// Überprüfen Sie, ob die Vorverarbeitung erfolgreich ist</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$stmt</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">'Error preparing statement: '</span></span><span> . </span><span><span class="hljs-variable">$conn</span></span><span>-&gt;error);
}

</span><span><span class="hljs-comment">// 4. Binden Sie Parameter</span></span><span>
</span><span><span class="hljs-variable">$name</span></span><span> = </span><span><span class="hljs-string">"John Doe"</span></span><span>;
</span><span><span class="hljs-variable">$email</span></span><span> = </span><span><span class="hljs-string">"[email protected]"</span></span><span>;
</span><span><span class="hljs-variable">$age</span></span><span> = </span><span><span class="hljs-number">25</span></span><span>;

</span><span><span class="hljs-comment">// "sss" Der variable Typ, der die gebundene darstellt,Entspricht Strings、Saite、Ganze Zahl</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"ssi"</span></span><span>, </span><span><span class="hljs-variable">$name</span></span><span>, </span><span><span class="hljs-variable">$email</span></span><span>, </span><span><span class="hljs-variable">$age</span></span><span>);

</span><span><span class="hljs-comment">// 5. 执行预处理Stellungnahme</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>()) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"New record created successfully"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Error: "</span></span><span> . </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;error;
}

</span><span><span class="hljs-comment">// 关闭Stellungnahme和连接</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-variable">$conn</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

4. Analyse des Code

  • Erstellen einer Datenbankverbindung : Verwenden Sie die neue Methode MySQLI (), um eine Verbindung zur Datenbank herzustellen. Wenn die Verbindung fehlschlägt, stoppt das Programm und zeigt eine Fehlermeldung an.

  • SQL -Anweisung : Definieren Sie eine SQL -Anweisung mit Platzhaltern in Benutzer (Name, E -Mail, Alter) Werte (?,?,?) . Hier ist der Platzhalter, was bedeutet, dass wir Daten in nachfolgenden Schritten dynamisch einfügen.

  • Vorbereitungserklärung : Erstellen Sie eine Vorverarbeitungsanweisung über die Methode $ conn-> Preped ($ SQL) . Wenn die Erstellung fehlschlägt, wird eine Fehlermeldung ausgegeben.

  • BIND-Parameter : Die $ stmt-> bind_param ("ssi", $ name, $ e-Mail, $ ay) bindet die Variablen $ Name , $ E-Mail und $ älter an das ? Platzhalter in der SQL -Erklärung. "SSI" repräsentiert den Datentyp des Parameters, s ist eine Zeichenfolge und ich ist eine Ganzzahl.

  • Anweisung ausführen : Ausführen von Vorverarbeitungsanweisungen über $ stmt-> execute () . Wenn die Ausführung erfolgreich ist, wird die Erfolgsnachricht zurückgegeben, andernfalls wird ein Fehler ausgegeben.

  • Ressource schließen : Nach der Ausführung müssen Sie die Vorverarbeitungsanweisung und die Datenbankverbindung schließen, um die Ressource freizugeben.


5. Vorteile von Vorverarbeitungsaussagen

  • Verhindern Sie die SQL -Injektion : Durch die Verwendung von Platzhaltern anstelle von SQL -Anweisungen können böswillige Benutzer SQL -Injektionsangriffe effektiv verhindern, indem sie Sonderzeichen eingeben.

  • Leistung verbessern : Wenn Sie die gleiche Abfrage mehrmals ausführen (z. B. die Stapelinsertion von Daten), ist die Verwendung von Vorverarbeitungsanweisungen viel effizienter als jedes Mal die Wiederholung von SQL-Anweisungen.

  • Clearer -Code : Die Verwendung von Vorverarbeitungsanweisungen kann die Codestruktur klarer machen, insbesondere wenn sie Benutzereingaben und mehrere Abfragen beinhalten, wodurch die Wahrscheinlichkeit von SQL -Spleißfehlern verringert wird.