3

「変数の数がプリペアドステートメントのパラメータの数と一致しません」というエラーが発生する理由がわかりません。

私のコードは次のようになります:

$DB['con'] = new mysqli($$DB['host'],$DB['user'],$DB['pass'],$DB['base']);

$stmt=$DB['con']->prepare("insert into points(iduser,puncte,nume,email,telefon,ultimulpost)values('?',?,'?','?','?',(SELECT CURDATE()))");
$stmt->bind_param('sisss',$idm,$mynumber,$nume,$email,$tel);
$stmt->execute();
4

1 に答える 1

9

問題は次の行にあります。

$stmt=$DB['con']->prepare("insert into points(iduser,puncte,nume,email,telefon,ultimulpost)values('?',?,'?','?','?',(SELECT CURDATE()))");

あなたの間違いは、?プレースホルダーを引用符で囲んでいることです。?これは、入力が必要なプレースホルダーとしてではなく、文字列リテラルとして解釈されることを意味します。したがって、実際にはプレースホルダーは 1 つしかないため、5 つ送信すると、番号が間違っていることがわかります。

引用符は不要です。の要点'sisss'は、「これらの値は文字列です」と言うことにあるため、同じことを言うために引用符を使用する必要はありません。

以下が機能するはずです。

$stmt=$DB['con']->prepare("insert into points(iduser,puncte,nume,email,telefon,ultimulpost)values(?,?,?,?,?,(SELECT CURDATE()))");
于 2012-10-03T08:19:05.540 に答える