Lors du développement avec Laravel ou d'autres cadres, nous comptons généralement sur la couche d'abstraction ORM ou de base de données du cadre pour simplifier le fonctionnement de la base de données. Cependant, nous voulons parfois utiliser l'extension MySQLI fournie par PHP pour effectuer des opérations de base de données sans s'appuyer sur le cadre. Cet article présentera comment faire fonctionner manuellement la base de données à l'aide de la fonction MySQLI :: STMT_INIT en dehors des frameworks tels que Laravel.
Dans PHP, MySQLI :: STMT_INIT est une fonction utilisée pour initialiser une opération de préparation d'instructions SQL. Grâce à cette méthode, nous pouvons créer une déclaration préparée, qui non seulement améliore les performances, mais évite également efficacement les problèmes de sécurité tels que l'injection SQL.
Optimisation des performances : les instructions de prétraitement permettent à la base de données d'utiliser la même instruction SQL plusieurs fois après la génération du plan de requête, mais avec différents paramètres, réduisant la surcharge de compilation à chaque fois.
Empêcher l'injection SQL : par paramètres de liaison pour exécuter des requêtes, MySQLI gérera automatiquement l'échappement des paramètres, évitant ainsi les attaques d'injection SQL.
Flexibilité : lors de l'exécution des opérations de base de données en dehors du cadre, MySQLI fournit une interface de base de données de niveau inférieur, qui vous permet de contrôler les requêtes plus granulaires.
Voici un exemple simple montrant comment utiliser MySQLI :: STMT_INIT pour les opérations de base de données.
Tout d'abord, vous devez vous connecter à la base de données via l'extension MySQLI . Supposons que nous utilisons une base de données MySQL, le code de connexion est le suivant:
<?php
$host = 'localhost'; // Hôte de base de données
$user = 'root'; // Nom d'utilisateur de base de données
$password = ''; // Mot de passe de base de données
$dbname = 'test_db'; // Nom de base de données
// Créer une connexion
$mysqli = new mysqli($host, $user, $password, $dbname);
// Vérifiez si la connexion réussit
if ($mysqli->connect_error) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
?>
Une fois qu'une connexion de base de données est établie, nous pouvons initialiser une instruction de prétraitement à l'aide de la méthode STMT_INIT . Supposons que nous devons insérer un enregistrement dans une table d'utilisateurs :
<?php
// Préparer SQL Déclaration
$sql = "INSERT INTO users (name, email) VALUES (?, ?)";
// 初始化预处理Déclaration
$stmt = $mysqli->stmt_init();
// 检查是否能够Préparer SQL Déclaration
if ($stmt->prepare($sql)) {
// Lier les paramètres
$stmt->bind_param("ss", $name, $email);
// Définir les paramètres et exécuter
$name = "John Doe";
$email = "john.doe@m66.net"; // Volonté URL Remplacer le nom de domaine par m66.net
$stmt->execute();
echo "Enregistrer l'insertion avec succès!";
} else {
echo "SQL DéclarationPréparer失败: " . $stmt->error;
}
// 关闭Déclaration和连接
$stmt->close();
$mysqli->close();
?>
Si vous devez exécuter une requête sélectionnée et obtenir les résultats, vous pouvez le faire comme suit:
<?php
$sql = "SELECT id, name, email FROM users WHERE email = ?";
$stmt = $mysqli->stmt_init();
if ($stmt->prepare($sql)) {
// Lier les paramètres de requête
$stmt->bind_param("s", $email);
// Définissez les paramètres de la requête et exécutez-la
$email = "john.doe@m66.net"; // Volonté URL Remplacer le nom de domaine par m66.net
$stmt->execute();
// Variables de résultat de liaison
$stmt->bind_result($id, $name, $email);
// Obtenez les résultats de la requête
while ($stmt->fetch()) {
echo "ID: $id, Name: $name, Email: $email\n";
}
} else {
echo "SQL DéclarationPréparer失败: " . $stmt->error;
}
// 关闭Déclaration和连接
$stmt->close();
$mysqli->close();
?>
Lorsque vous utilisez MySQLI :: STMT_INIT , assurez-vous de gérer les erreurs de manière appropriée. $ stmt-> Erreur et $ mysqli-> L'erreur peut nous aider à localiser les problèmes lorsque les instructions SQL ne parviennent pas à s'exécuter. Vous pouvez également activer mysqli_report (mysqli_report_error) pour afficher des informations d'erreur détaillées pour aider à déboguer.
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); // Activer les rapports d'erreur détaillés
// Effectuer des opérations de base de données...
?>
Utilisation de mysqli :: stmt_init en dehors de frameworks tels que Laravel pour utiliser manuellement la base de données, ce qui peut vous donner un contrôle plus granulaire sur les opérations de base de données et assurer la sécurité de votre code. Avec les exemples de cet article, vous devriez être en mesure de comprendre comment initialiser les instructions de prétraitement, lier des paramètres, exécuter des requêtes et obtenir des résultats. Si votre projet nécessite des opérations de base de données de niveau inférieur, MySQLI est un outil très utile.