背景
テーブルに対して、配列で取ったデータを基に、処理を行う
(例えば、フロント側でチェックボックスにチェックしたものを、バック側で処理するということ)
//ここで配列を取得
$arr = $_POST["arr"];
//配列要素数分のプレースホルダ("?")を作成する
//($arrが[1,2]だと、$placeholdersが ?,? になる])
$placeholders = implode(',', array_fill(0, count($arr), '?'));
$id = $_POST["id"];//例えば、001
global $host, $user, $pass, $db;
$conn = new mysqli($host, $user, $pass, $db);
if ($conn->connect_error) {
echo json_encode(['success' => false, 'message' => 'データベース接続失敗: ' . $conn->connect_error]);
exit();
}
//上記の場合、UPDATE table SET flag = '0' WHERE user_id = ? AND page_id IN (?,?)になる
$sql = "UPDATE table SET flag = '0' WHERE user_id = ? AND page_id IN ($placeholders)";
$stmt = $conn->prepare($sql);
// プレースホルダーにバインドするための配列を作成
//$params = [001,1,2];
$params = array_merge([$id], $arr);
//$params配列の要素数分だけ's'を繰り返した文字列を作成
//$paramsには三つあり、$types="sss";
$types = str_repeat('s', count($params));
//動的にパラメータをバインド
//スプレッド演算子「...」で配列を個別の引数に展開する
$stmt->bind_param($types, ...$params);
//クエリを実行
if ($stmt->execute()) {
//省略
}
始めてやったので、メモしておく。