Premiers pas avec les instructions préparées dans MySQL
Les instructions préparées sont un outil essentiel pour écrire des requêtes SQL sécurisées et efficaces. Dans cet article, nous allons explorer comment utiliser les instructions préparées avec mysqli, l'extension MySQLi en PHP.
Erreur de syntaxe : exécution non-objet
L'erreur que vous rencontrez , "Erreur fatale : appel à une fonction membre exécuter() sur un non-objet", indique généralement que la variable $stmt n'est pas correctement initialisée ou qu'il s'agit d'un objet. Voici comment le corriger :
$stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)");
Assurez-vous d'avoir une connexion valide à la base de données avant de continuer.
Paramètres de liaison
Relevés préparés utilisez des marqueurs de paramètres (par exemple ?) pour représenter les valeurs d’entrée. Ces valeurs doivent être liées aux variables PHP avant d'exécuter l'instruction. Voici un exemple :
$name = 'one'; $age = 1; $stmt->bind_param('si', $name, $age);
Dans cet exemple, nous lions le paramètre name sous forme de chaîne ('s') et le paramètre age sous forme d'entier ('i').
Exécuter l'instruction
Une fois les paramètres liés, vous pouvez exécuter l'instruction préparée instruction :
$stmt->execute();
Gestion des erreurs
Les instructions préparées offrent une meilleure gestion des erreurs que les requêtes SQL directes. Utilisez la méthode mysqli_stmt::error pour récupérer les messages d'erreur :
if ($stmt->error) { die("Error: " . $stmt->error); }
Exemple complet
Voici un exemple complet d'insertion, de sélection et de gestion des erreurs :
// Establish connection $mysqli = new mysqli("localhost", "root", "root", "test"); // Prepare and bind parameters $stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)"); $stmt->bind_param('si', $name, $age); // Insert multiple rows $name = 'one'; $age = 1; $stmt->execute(); $name = 'two'; $age = 2; $stmt->execute(); // Prepare and execute select statement $stmt = $mysqli->prepare("SELECT * FROM users"); $stmt->execute(); // Bind result $result = $stmt->get_result(); // Process results while ($row = $result->fetch_assoc()) { echo $row['name'] . ", " . $row['age'] . "
\n"; } // Handle errors if ($stmt->error) { die("Error: " . $stmt->error); }
En utilisant des instructions préparées, vous pouvez empêcher les attaques par injection SQL et écrire du SQL plus robuste et plus efficace. requêtes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!