-1

我有代码(如下),它使用准备好的语句将数据插入到 mysqli 的数据库中

$stmt = $db_connection->prepare('INSERT INTO accounts (id,name,email,password) VALUES (?,?,?)');
$stmt->bind_param('sss', "mukur","hotmail","grapes");
$stmt->execute();
$stmt->close();

当我运行代码时,我得到“致命错误,在非对象上调用成员函数 bid_param()...”![在此处输入图像描述][2]

在 bind_param 部分,我只给出了三个 's',因为列 'id' 是自动递增字段

我的完整代码在这里

在此处输入图像描述

4

2 回答 2

0

首先,调用prepare()失败是因为您的INSERT陈述是错误的。如果您有错误处理,那么您将收到此错误消息

列计数与第 1 行的值计数不匹配

列列表中的列数应与VALUES部分列数匹配。因此改变

INSERT INTO accounts (id,name,email,password) VALUES (?,?,?)
                      ^^^

INSERT INTO accounts (name,email,password) VALUES (?,?,?)

其次将 变量bind_param()绑定到标记,这意味着它需要通过引用传递参数。因此,您的代码应如下所示

$db = new mysqli('localhost', 'user', 'password', 'dbname');
if ($db->connect_errno) {
    die('Connection failed: %s\n' . $db->connect_error); //TODO better error handling
}

$sql = 'INSERT INTO accounts (id, name,email,password) VALUES (?,?,?)';
$stmt = $db->prepare($sql);
if (!$stmt) {
    die('Can\'t prepare: ' . $db->error); //TODO better error handling
}

$name     = 'mukur';
$email    = 'hotmail';
$password = 'grapes';

$stmt->bind_param('sss', $name, $email, $password);
$stmt->execute();
$stmt->close();
$db-close();
于 2013-07-26T06:22:27.133 回答
0

请使用以下更改。

$stmt = $db_connection->prepare('INSERT INTO accounts (name,email,password) VALUES (?,?,?)');

$stmt->bind_param("mukur","hotmail","grapes");

于 2013-07-26T06:33:13.603 回答