我有代码(下面),它使用预准备语句将数据插入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'是自动递增的字段
我的完整代码在这里
答案 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");