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 un connexion valide à la base de données avant de continuer.
Paramètres de liaison
Les instructions préparées utilisent le paramètre des marqueurs (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 des requêtes SQL plus robustes et efficaces.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3