まず、ステートメントが間違っているため、への呼び出し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();