En tentant d'utiliser des instructions préparées, un développeur a rencontré des difficultés et a reçu l'erreur « Erreur fatale : appel à une fonction membre exécutée () sur un non-objet." Cet article examine la cause première de ce problème et fournit un guide complet sur l'utilisation appropriée des instructions préparées dans Mysqli.
Le problème provient de l'omission de la liaison des paramètres. avant d'exécuter l'instruction préparée. Mysqli nécessite la liaison des paramètres aux variables d'application via la fonction mysqli_stmt_bind_param() avant d'exécuter l'instruction.
1. Liaison des paramètres :
$name = 'one'; $age = 1; $stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)"); // bind parameters. Refer to documentation for appropriate data types (e.g., 'si' for string and integer). $stmt->bind_param('si', $name, $age);
2. Exécution de la déclaration :
$stmt->execute();
3. Liaison et exécution ultérieures des paramètres :
Pour insérer plusieurs lignes avec des valeurs différentes, l'étape de liaison des paramètres doit être répétée avant chaque exécution.
Exemple :
$name = 'two'; $age = 2; // Update bound parameters $stmt->bind_param('si', $name, $age); // Execute with different values $stmt->execute();
4. Exemple complet :
$mysqli = new mysqli("localhost", "root", "root", "test"); if ($mysqli->connect_errno) { echo "Failed to connect to MySQL: " . $mysqli->connect_error; } $stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)"); try { // Insert one row $name = 'one'; $age = 1; $stmt->bind_param('si', $name, $age); $stmt->execute(); // Insert another row with different values $name = 'two'; $age = 2; $stmt->bind_param('si', $name, $age); $stmt->execute(); } catch (Exception $e) { echo "Error: " . $e->getMessage(); }
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!