Maison > base de données > tutoriel mysql > Pourquoi est-ce que j'obtiens « Erreur fatale : appel à une fonction membre exécuter() sur un non-objet » lors de l'utilisation d'instructions préparées Mysqli ?

Pourquoi est-ce que j'obtiens « Erreur fatale : appel à une fonction membre exécuter() sur un non-objet » lors de l'utilisation d'instructions préparées Mysqli ?

Linda Hamilton
Libérer: 2024-12-25 15:15:16
original
907 Les gens l'ont consulté

Why Am I Getting

Pièges liés à l'utilisation des instructions préparées Mysqli

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.

Origine de l'erreur

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.

Implémentation des instructions préparées

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);
Copier après la connexion

2. Exécution de la déclaration :

$stmt->execute();
Copier après la connexion

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();
Copier après la connexion

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();
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal