2016-07-29 10 views
1

私はこのことから...エラー:SQLSTATE [hy093]:無効なパラメータ番号

を行くのphpMyAdminで実行されるSQL文の中echo'ed出力に変換することができます:

INSERT INTO crumbs (ip_address,ip_address_2,device_info,user_id,connections) VALUES(?,?,?,?,?)Value:'00.000.000.000', '00.000.000.000', 0,0000, 1

この中へ

INSERT INTO crumbs (ip_address,ip_address_2,device_info,user_id,connections) VALUES('00.000.000.000', '00.000.000.000', 0,0000, 1)

それはエラーが、しかしそれはPHを通じて実行しない、DBにデータを挿入P-PDO ...

付:

SQLSTATE[HY093]: Invalid parameter number

コード:

 $columns = '('.implode(',', array_keys($user_connection)).''.",user_id,connections)"; 
     $inserts="(".implode(',',array_fill(0,count($user_connection)+2, '?')).")"; 
     $values = implode(', ',($user_connection)).",$user_id, 1"; 

     $sql_insert = "INSERT INTO crumbs ".$columns." VALUES".$inserts; 
     $stmt = $this->_db->prepare($sql_insert); 
     $stmt->execute(array($values)); 

編集・追加$のuser_connection

$user_connection [ 'ip_address'] = "'".$_SERVER['REMOTE_ADDR']."'"; 
$user_connection [ 'ip_address_2']="'".$_SERVER['HTTP_X_FORWARDED_FOR']."'"; 
$user_connection ['device_info']=0; 

このエラーは、SQLコードの実行中に発生します。私はすべての例を見てきましたが、それと同等のものは何も見つかりませんでした。私はコードがローカルで実行されているので、それが単純なものだと思っています。

// ..code.. 
$values = $user_connection; 
$values[] = $user_id; 
$values[] = 1; 
// ..code.. 
$stmt->execute($values); 

問題の説明:あなたは、複数の?プレースホルダを持っている場合

は、あなたが制限されるために各値を渡すことができます。このような何かをしなければならない

+0

で終わる(1)の値と同じ量を提供していませんでしたので、しかし、私はほとんど例外なく、配列 'または上記のように私の実行コマンドをカプセル化します:execute(array($ values));値はコンマで区切られた配列の値に変換されます(つまり、私の経験になります)。しかし、私は別の配列にカプセル化しようとします。 – Chris

+0

これはうまくいきましたが、配列()がコード内のどこにでも動作するこのインスタンスではうまくいかない理由が混乱しています。 – Chris

+0

おそらくどこにいても少し違っています。私はそれを見ずに確実に言うことができません(値が正しくデータベースに保存されていることを確認してください) – FirstOne

答えて

-1

配列の値として(からthe manualまでを参照)。あなたがimplodeを使用しているので、

さて、$valuesは単一の文字列、あなたがexecute(array($values))を呼び出すとき、それは、実際には、この(representation-のようにそれをバインドすることを意味します

'192.168.0.1', '8.8.8.8', 0, 'userid', 1 

のようなものになります他のアレイの爆縮:あなただけ送信され、一つの値を持つ配列ためだけ、それは)このように、本当に

INSERT INTO crumbs (ip_address,ip_address_2,device_info,user_id,connections) VALUES ("'192.168.0.1', '8.8.8.8', 0, 'userid', 1", ?, ?, ?, ?) 

ではありません。あなたはプレースホルダを持っているように私は$のuser_connectionの構造を掲載しました、私はそれを間違って理解していること(5)、あなたは

Invalid parameter number

+0

あなたが何かが間違っていることを知らせなければ、 、@Downvoter – FirstOne

+0

私の主な質問は、動的に値を構築する方法、配列を入れるときに文字列から引用符を取り除くことでしょうか? – Chris

+0

@Chris最初に引用符を追加しないことをお勧めします(< - これはオプションですか?)。バインドされたステートメントをバインドされた値で使用する場合は、引用符を使用する必要はありません。 – FirstOne

関連する問題