Home >Database >Mysql Tutorial >Why Does My mysqli Prepared Statement Return 'Call to a member function execute() on a non-object'?

Why Does My mysqli Prepared Statement Return 'Call to a member function execute() on a non-object'?

DDD
DDDOriginal
2024-12-21 03:54:09483browse

Why Does My mysqli Prepared Statement Return

Using mysqli Prepared Statements

When using prepared statements with mysqli, it's essential to correctly bind parameters before executing the query.

Error Debugging

The provided code encounters the error "Call to a member function execute() on a non-object" because parameter binding hasn't been performed. According to the mysqli_prepare documentation, parameter markers need to be bound using mysqli_stmt_bind_param before executing.

Complete Example with Error Handling:

The following is a more complete example that includes parameter binding, error handling, and demonstrates inserting and fetching data using prepared statements:

<?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();
?>

This code handles errors during statement preparation, execution, and result retrieval, providing a more robust demonstration of prepared statement usage.

The above is the detailed content of Why Does My mysqli Prepared Statement Return 'Call to a member function execute() on a non-object'?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn