-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 部分では、列「id」が自動インクリメント フィールドであるため、「s」を 3 つだけ指定しました

私の完全なコードはここにあります

ここに画像の説明を入力

4

2 に答える 2

0

以下の変更を使用してください。

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

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

于 2013-07-26T06:33:13.603 に答える
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 に答える