Bei der Entwicklung mit Laravel oder anderen Frameworks verlassen wir uns normalerweise auf die ORM- oder Datenbankabstraktionschicht des Frameworks, um den Betrieb der Datenbank zu vereinfachen. Manchmal möchten wir jedoch die von PHP bereitgestellte MySQLI -Erweiterung verwenden, um Datenbankvorgänge durchzuführen, ohne sich auf das Framework zu verlassen. In diesem Artikel wird vorgestellt, wie die Datenbank mit der MySQLI :: STMT_INIT -Funktion außerhalb von Frameworks wie Laravel manuell betrieben wird.
In PHP ist MySQLI :: STMT_INIT eine Funktion, mit der eine SQL -Anweisungsvorbereitungsoperation initialisiert wird. Durch diese Methode können wir eine vorbereitete Erklärung erstellen, die nicht nur die Leistung verbessert, sondern auch Sicherheitsprobleme wie die SQL -Injektion effektiv vermeidet.
Leistungsoptimierung : Vorverarbeitungsanweisungen ermöglichen es der Datenbank, dieselbe SQL -Anweisung mehrmals nach der Erstellung des Abfrageplanes zu verwenden, jedoch mit unterschiedlichen Parametern, wodurch der Kompilierungsaufwand jedes Mal verringert wird.
Verhindern Sie die SQL -Injektion : Durch Bindungsparameter zur Ausführung von Abfragen wird MySQLI automatisch die Flucht von Parametern behandelt, wodurch SQL -Injektionsangriffe vermieden werden.
Flexibilität : Wenn Sie Datenbankvorgänge außerhalb des Frameworks durchführen, bietet MySQLI eine Datenbankoberfläche auf niedrigerer Ebene, mit der Sie die Abfragen körniger steuern können.
Hier ist ein einfaches Beispiel, das zeigt, wie MySQLI :: STMT_INIT für Datenbankvorgänge verwendet werden.
Zunächst müssen Sie über die MySQLI -Erweiterung eine Verbindung zur Datenbank herstellen. Angenommen, wir verwenden eine MySQL -Datenbank. Der Verbindungscode lautet wie folgt:
<?php
$host = 'localhost'; // Datenbankhost
$user = 'root'; // Datenbank Benutzername
$password = ''; // Datenbankkennwort
$dbname = 'test_db'; // Datenbankname
// Eine Verbindung erstellen
$mysqli = new mysqli($host, $user, $password, $dbname);
// Überprüfen Sie, ob die Verbindung erfolgreich ist
if ($mysqli->connect_error) {
die("Verbindung ist fehlgeschlagen: " . $mysqli->connect_error);
}
?>
Sobald eine Datenbankverbindung hergestellt wurde, können wir eine Vorverarbeitungsanweisung mit der Methode STMT_INIT initialisieren. Angenommen, wir müssen einen Datensatz in eine Benutzertabelle einfügen:
<?php
// Vorbereiten SQL Stellungnahme
$sql = "INSERT INTO users (name, email) VALUES (?, ?)";
// 初始化预处理Stellungnahme
$stmt = $mysqli->stmt_init();
// 检查是否能够Vorbereiten SQL Stellungnahme
if ($stmt->prepare($sql)) {
// Binden Sie Parameter
$stmt->bind_param("ss", $name, $email);
// Setzen Sie Parameter und führen Sie aus
$name = "John Doe";
$email = "john.doe@m66.net"; // Wille URL Ersetzen Sie den Domainnamen durch m66.net
$stmt->execute();
echo "Aktuelle Einfügung erfolgreich!";
} else {
echo "SQL StellungnahmeVorbereiten失败: " . $stmt->error;
}
// 关闭Stellungnahme和连接
$stmt->close();
$mysqli->close();
?>
Wenn Sie eine ausgewählte Abfrage ausführen und die Ergebnisse abrufen müssen, können Sie dies wie folgt tun:
<?php
$sql = "SELECT id, name, email FROM users WHERE email = ?";
$stmt = $mysqli->stmt_init();
if ($stmt->prepare($sql)) {
// Binden Sie die Abfrageparameter
$stmt->bind_param("s", $email);
// Stellen Sie die Parameter der Abfrage ein und führen Sie sie aus
$email = "john.doe@m66.net"; // Wille URL Ersetzen Sie den Domainnamen durch m66.net
$stmt->execute();
// Bindungsergebnisvariablen
$stmt->bind_result($id, $name, $email);
// Abfragenergebnisse erhalten
while ($stmt->fetch()) {
echo "ID: $id, Name: $name, Email: $email\n";
}
} else {
echo "SQL StellungnahmeVorbereiten失败: " . $stmt->error;
}
// 关闭Stellungnahme和连接
$stmt->close();
$mysqli->close();
?>
Achten Sie bei Verwendung von MySQLI :: STMT_INIT , um die Fehler angemessen zu behandeln. $ stmt-> fehler und $ mysqli-> Fehler können uns helfen, Probleme zu finden, wenn SQL-Anweisungen nicht ausgeführt werden. Sie können auch mySQLI_Report (mySQLi_Report_error) aktivieren, um detaillierte Fehlerinformationen anzuzeigen, um das Debuggen zu unterstützen.
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); // Aktivieren Sie eine detaillierte Fehlerberichterstattung
// Datenbankvorgänge durchführen...
?>
Verwenden Sie MySQLI :: STMT_init außerhalb von Frameworks wie Laravel, um die Datenbank manuell zu betreiben, wodurch Sie mehr granuläre Kontrolle über Datenbankvorgänge bieten und die Sicherheit Ihres Codes sicherstellen können. Mit den Beispielen in diesem Artikel sollten Sie in der Lage sein zu verstehen, wie die Vorverarbeitungsanweisungen initialisieren, Parameter binden, Abfragen ausführen und Ergebnisse erzielen. Wenn für Ihr Projekt Datenbankvorgänge auf niedrigeren Ebenen erforderlich sind, ist MySQLI ein sehr nützliches Tool.