<開発環境>
xampp:Windows 8.0.3
VSCode:ver-1.54.3
<相談したいこと>
POSTで値を受け取った数だけプレースホルダを設置したいと考え、以下のコードを書きました。
PHP
1if(isset($_POST["List"])) { 2 $Lists = $_POST["List"]; 3} else { 4 echo 'アクセスエラー'; 5} 6 7//配列の要素数だけパラメータを設置 8$str = str_repeat(', ?', (count($Lists)-1)); 9 10$stmt = $pdo->prepare ( 11 "SELECT * FROM 名簿 M 12 INNER JOIN 受入先マスタ U ON S.引受先 = U.No 13 INNER JOIN 国マスタ K ON S.国籍 = K.code 14 WHERE M.氏名 IN (?" . $str . ");"); 15 16 17for ($i=1; $i < count($Lists); $i++) { 18 $stmt->bindValue($i, $Lists[$i-1], PDO::PARAM_STR); 19 } 20 21$stmt->execute();
例えば3つ値を取得した場合、
SQLの実行文は
SQL
1SELECT * FROM 名簿 M 2 INNER JOIN 受入先マスタ U ON S.引受先 = U.No 3 INNER JOIN 国マスタ K ON S.国籍 = K.code 4WHERE M.氏名 IN (?, ?, ?);
と出力されるので問題がなさそうに感じますが、エラーがでます。
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '', ?, ?')' at line 4
どこを見落としているのかが分からず相談させていただきました。
よろしくお願いします。
<試したこと>
PHPでSQL文中に変数を展開するにはどうすればよいのでしょうか
https://teratail.com/questions/96690
SQLSTATE[42000]: Syntax error or access violation: が発生するが原因がわからない
https://teratail.com/questions/60425
サイトを参考にして確認してみました。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/18 03:08
2021/03/18 03:15
2021/03/18 03:32
2021/03/18 03:32
2021/03/18 03:44
2021/03/18 04:54