执行准备好的声明不在mysqli中工作

时间:2013-07-26 06:16:26

标签: mysql mysqli

我有代码(下面),它使用预准备语句将数据插入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部分,我只给出了三个''作为列'id'是自动递增的字段

我的完整代码在这里

enter image description here

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

请使用以下更改。

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

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