質問: $stmt->errorInfo(); exit('sqlError:'.$error[2]); } else { header('Location: index.php'); ``` エラー内容 sqlError:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[$idx])' at line 1 ### 補足情報(FW/ツールのバージョンなど) 超基礎的ですいません、「mysql php 配列」といったワードで検索しましたがよくわからず...
回答: 試したこと のコードを活かしたいならwhile前で$sqlを初期化しておきwhile内の$sqlは +=で入れてidもnullでなくてちゃんと入れるだけで良さそうです。 ※テーブル定義の提示がないので本当にこれだけでいいのかは不明ですが バルクインサートとは少し違いますがexecute1回で済むので1回ずつ実行するより負荷は少ないでしょう。 ただ、今のSQLの作り方だとSQLインジェクションの脆弱性があるので、値はパラメータにしてbindValue→executeの形をとった方が良いですし、try-catchによるPDOExceptionを拾うような仕組み、トランザクション→コミットorロールバックも入れましょう。 PHPでデータベースに接続するときのまとめ 基本的な点1: シングルクォーテーション内では変数は展開できません。 > > PHPマニュアル:文字列#引用符 > > 注意: ダブルクォート 構文や heredoc 構文とは異なり、 **変数と特殊文字のエスケープシーケンスは、 引用符 (シングルクオート) で括られた文字列にある場合には展開されません。** > > > 基本的な点2: SQLにおいて文字列は`''`で囲わないとエラーとなります。 ※なのでやはりtry-catchは必須ですしパラメータ→prepare→bindValue→executeの流れも必須