学习如何利用mysqli预处理语句进行数据库操作
P粉838563523
P粉838563523 2023-08-24 16:54:12
[PHP讨论组]

我正在尝试使用预处理语句,但是下面的代码不起作用。我收到了以下错误:

致命错误:在/var/www/prepared.php的第12行调用非对象的成员函数execute()

<?php

    $mysqli = new mysqli("localhost", "root", "root", "test");
    if ($mysqli->connect_errno) {
        echo "连接MySQL失败:" . $mysqli->connect_error;
    }

    $stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)");

    // 插入一行
    $stmt->execute(array('one',1));

    // 插入另一行,使用不同的值
    $stmt->execute(array('two',1));
?>

另外,我需要使用mysqli来进行预处理语句吗?有没有人能给我指出一个完整的预处理语句的示例,包括连接、插入和选择以及错误处理?

P粉838563523
P粉838563523

全部回复(2)
P粉729436537

你也可以使用我更喜欢的PDO。实际上,在你的代码示例中,你似乎混淆了PDO和Mysqli。

$db = new PDO($dsn, $user, $pass);
$stmt = $db->prepare("INSERT INTO users (name, age) VALUES (?,?)");
$stmt->execute(array($name1, $age1));
$stmt->execute(array($name2, $age2));

与mysqli不同,你不需要调用单独的绑定函数,尽管如果你喜欢/想要/需要使用它,该功能是可用的。

PDO的另一个有趣之处是命名占位符,它在复杂查询中可能会更不容易混淆:

$db = new PDO($dsn, $user, $pass);
$stmt = $db->prepare("INSERT INTO users (name, age) VALUES (:name,:age)");
$stmt->execute(array(':name' => $name1, ':age' => $age1));
$stmt->execute(array(':name' => $name2, ':age' => $age2));
P粉348088995

来自mysqli::prepare文档

bind_param文档

即:

$name = 'one';
$age  = 1;

$stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)");

// 绑定参数。我猜测是'string'和'integer',但请阅读文档。
$stmt->bind_param('si', $name, $age);

// *现在*我们可以执行
$stmt->execute();
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号