Maison >base de données >tutoriel mysql >Pourquoi mon instruction préparée mysqli renvoie-t-elle « Appel à une fonction membre exécuter () sur un non-objet » ?

Pourquoi mon instruction préparée mysqli renvoie-t-elle « Appel à une fonction membre exécuter () sur un non-objet » ?

DDD
DDDoriginal
2024-12-21 03:54:09525parcourir

Why Does My mysqli Prepared Statement Return

Utilisation des instructions préparées mysqli

Lors de l'utilisation d'instructions préparées avec mysqli, il est essentiel de lier correctement les paramètres avant d'exécuter la requête.

Erreur de débogage

Le fourni le code rencontre l'erreur « Appel à une fonction membre exécuter () sur un non-objet » car la liaison des paramètres n'a pas été effectuée. Selon la documentation mysqli_prepare, les marqueurs de paramètres doivent être liés à l'aide de mysqli_stmt_bind_param avant de s'exécuter.

Exemple complet avec gestion des erreurs :

Ce qui suit est un exemple plus complet qui inclut liaison des paramètres, gestion des erreurs et démontre l'insertion et la récupération de données à l'aide de préparés déclarations :

<?php

// Establish database connection
$mysqli = new mysqli("localhost", "root", "root", "test");
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: " . $mysqli->connect_error;
    exit;
}

// Prepare insert statement
$stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)");
if (!$stmt) {
    echo "Error preparing statement: " . $mysqli->error;
    exit;
}

// Bind parameters and insert one row
$name = 'One';
$age = 1;
$stmt->bind_param('si', $name, $age);
$stmt->execute();
if ($stmt->errno) {
    echo "Error executing insert: " . $stmt->error;
    exit;
}

// Insert another row with different values
$name = 'Two';
$age = 2;
$stmt->bind_param('si', $name, $age);
$stmt->execute();
if ($stmt->errno) {
    echo "Error executing insert: " . $stmt->error;
    exit;
}

// Prepare select statement
$stmt = $mysqli->prepare("SELECT name, age FROM users");
if (!$stmt) {
    echo "Error preparing statement: " . $mysqli->error;
    exit;
}

// Execute select statement and fetch results
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        echo "{$row['name']} is {$row['age']} years old<br>";
    }
}

// Close statement and connection
$stmt->close();
$mysqli->close();
?>

Ce code gère les erreurs lors de la préparation, de l'exécution et de la récupération des résultats de l'instruction, fournissant une démonstration plus robuste de l'utilisation des instructions préparées.

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!

Déclaration:
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