usersというテーブルにdataというjson型カラムを作成しています。
data内の単一項目は、
php
1$sql = new mysqli($host, $user, $pass, $db); 2$stmt = $sql->prepare("update users set data = json_set(data,?,?) where id = ?"); 3$stmt->bind_param("sii",$key,$value,$id);
のような形で保存できます。
この項目が配列の場合、
php
1// 3個分の配列保存 2$sql = new mysqli($host, $user, $pass, $db); 3$stmt = $sql->prepare("update users set data = json_set(data,?,json_array(?,?,?)) where id = ?"); 4$stmt->bind_param("siiii",$key,$v1,$v2,$v3,$id);
のように、保存個数に応じたものになるかと思います。
しかし、この配列は利用者の要望した設定で可変するものですので、保存個数はスクリプト作成時点で確定しません。
配列データに応じて、prepareは文字列加工を頑張り、bind_paramはcall_user_func_arrayで可変引数をすれば不可能ではないのかもしれませんが、もっと素直に、json_array部分がひとつの「?」で済むような方法はないでしょうか?
ちなみに、保存する配列の各要素は数値idです。