プレースホルダを可変長で用意すべき案件ですね.値を直接書いてしまうとプリペアドステートメントを使う意味が無くなるのでご注意を.
php
1<?php
2
3// 接続
4require 'db_con.php';
5
6// ユニークな1次元の数値添字配列を強制
7$city_cd = isset($_GET['city_cd']) ? (array)$_GET['city_cd'] : [];
8$city_cd = array_values(array_unique(array_filter($city_cd, 'is_string')));
9
10// city_cdが空なら異常終了
11if (!$city_cd) {
12 header('Content-Type: text/plain; charset=UTF-8', true, 400);
13 exit('パラメータが不正です');
14}
15
16// SELECT ... FROM .. WHERE city_cd IN (?, ?, ?, ..., ?)
17$sql = sprintf(
18 'SELECT town_cd, town_name
19 FROM town WHERE city_cd IN (%s) ORDER BY town_cd',
20 implode(', ', array_fill_keys($city_cd, '?'))
21);
22$stmt = $dbh->prepare($sql);
23
24// ?に値をバインドして実行
25$stmt->execute($city_cd);
もしcity_cd
が整数型である場合は
php
1<?php
2
3// 接続
4require 'db_con.php';
5
6// ユニークな整数値を持つ数値添字配列を強制
7$city_cd = isset($_GET['city_cd']) ? (array)$_GET['city_cd'] : [];
8$city_cd = array_values(array_unique(array_map($city_cd, 'intval')));
9
10// city_cdが空なら異常終了
11if (!$city_cd) {
12 header('Content-Type: text/plain; charset=UTF-8', true, 400);
13 exit('パラメータが不正です');
14}
15
16// 実行
17$sql = sprintf(
18 'SELECT town_cd, town_name
19 FROM town WHERE city_cd IN (%s) ORDER BY town_cd',
20 implode(', ', implode($city_cd))
21);
22$stmt = $dbh->query($sql);
でいいかと思います.最初の$_GET
のバリデーションが重要です,特に後者においては必須です.ここは手を抜いてはいけません.
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。