首页 > 数据库 > mysql教程 > 为什么在使用 Mysqli 准备语句时出现'致命错误:在非对象上调用成员函数execute()”?

为什么在使用 Mysqli 准备语句时出现'致命错误:在非对象上调用成员函数execute()”?

Linda Hamilton
发布: 2024-12-25 15:15:16
原创
906 人浏览过

Why Am I Getting

使用 Mysqli 预准备语句的陷阱

在尝试使用预准备语句时,开发人员遇到了挑战并收到错误“致命错误:调用成员函数执行() 在非物体上。”本文深入探讨了该问题的根本原因,并提供了有关在 Mysqli 中正确使用 prepared statements 的全面指南。

错误的根源

问题是由于省略参数绑定而产生的在执行准备好的语句之前。 Mysqli 需要在执行语句之前通过 mysqli_stmt_bind_param() 函数将参数绑定到应用程序变量。

实现准备好的语句

1.参数绑定:

$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.语句执行:

$stmt->execute();
登录后复制

3.后续参数绑定和执行:

要插入具有不同值的多行,每次执行前必须重复参数绑定步骤。

示例:

$name = 'two';
$age  = 2;

// Update bound parameters
$stmt->bind_param('si', $name, $age);

// Execute with different values
$stmt->execute();
登录后复制

4.完整示例:

$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();
}
登录后复制

以上是为什么在使用 Mysqli 准备语句时出现'致命错误:在非对象上调用成员函数execute()”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板