お疲れ様です。
CAKEPHPの文法というか、バージョン2から4への移行について質問したいと思います。
やりたいのは、データベースにインサートを一括にしたいです。
あるCSVファイルからデータを読み込みした配列と(ここまでは問題なく成功)、IMPLODEで読み込んだデータを2つのフィールドに分けた配列をバインドしてDBに入れたいです。
現在、読み込みした配列は、$ParamArray, フィールド分けのための配列は、$holderarray という変数名をつけています。配列の中身は、以下の通りです。
$aParamArray = [ ['001'], ['りんご'], ['002'], ['ばなな'] ・・・ ]
$holderarray ₌ [(?,?),(?,?),・・・]
すると、望ましいのは、この2つの配列が以下のようにバインドされ、Insert文のValuesにあたえられることです。
[(001,りんご),(002,ばなな),・・・]
値は問題なくとれていて、配列の中身も大丈夫です。
CAKEPHP2では、以下のソースで上手くでき、望ましい結果が得られました。
PHP
1 $fields = implode(',', array("id", "name")); 2 $sql = "insert into {table_name} ({$fields}) values {$holderarray}"; 3 $rc = $model->query($sql, $aParamArray); 4 // Insertを走らせるために試したけど失敗 5 // $rc = $model->query($sql,$aParamArray)->execute();
しかし、CAKEPHP4では、Insert文が走らずバインドもされず、$rcが空になってリターンされます。
Insert文を走らせたいと思い、Execute()を追加したら、以下のようなエラーメッセージで怒られました。
'Unserializable object - Cake\Database\Statement\CallbackStatement. Error: Serialization of 'PDO' is not allowed in C:\xampp\htdocs\Project\vendor\cakephp\debug_kit\src\Panel\VariablesPanel.php, line 176',
これをCAKEPHP4ではどのように書き換えておけばいいのか、マニュアルみながら色々試してみましたが、上手くいかなかったです。
PHP
1 // CAKEPHP4に変えてみようとして失敗したコード 2 $sql = $model->query(); 3 $rc = $sql->insert([$fields]) 4 ->bind([$aParamArray],['array']) 5 ->execute();
すると、このようなエラーが出ます。
[TypeError] substr() expects parameter 1 to be string, array given in C:\xampp\htdocs\Project\vendor\cakephp\cakephp\src\Database\ValueBinder.php on line 55
何かヒントになりそうなものや、参考できるコメントいただけると幸いです。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー