質問: 'INSERT INTO users (user_id, user_name) VALUES (?,?),(?,?) ON DUPLICATE KEY UPDATE user_name=VALUES(user_name)'; ``` この時の$paramsにはどんな形でデータを詰めれば良いのでしょうか? 以下のように詰めて渡すとエラー(Array to string conversion)になりました。 array(2) { [0]=> array(2) { [0]=> int(111) [1]=> string(1) "山田" } [1]=> array(2) { [0]=> int(112) [1]=> string(1) "斎藤" } } ご存知のかた居ましたら教えていただけますでしょうか? 宜しくお願い致します。
回答: 1つのプレースホルダに(配列のような)複数の値を割り当てることはできません。 > > 注意: > > パラメータマーカーが表せるのは、データリテラルだけです。 リテラルの一部やキーワード、識別子、その他のクエリのパーツをパラメータにバインドすることはできません。 たとえば、SQL 文の IN() 句などで、 **ひとつのパラメータに複数の値を割り当てることはできません。** > > > 配列の要素の数に合わせて`(?,?),(?,?), ...`部分を動的に生成するか、 ``` INSERT INTO users (user_id, user_name) VALUES (?,?) ON DUPLICATE KEY UPDATE user_name=VALUES(user_name) ``` という単一の行を挿入・更新するSQLを、要素数だけ繰り返し実行してやる必要があります。 (個人的には、後者の方法をお勧めします) 以下が参考になるかと思います。