質問: "INSERT INTO salt26_timetable(ymd,category,category_id,t" .$h . $i . ") VALUES('" .$y.$m.$d . "','booked','" . $staff_id . "','" . $client_id . "') ON DUPLICATE KEY UPDATE t" . $h.$i . "=" .$client_id; ``` とし、その後、$mysqli->query($query)が失敗している模様です。 上記のPHPコードは、具体的には、 ``` INSERT INTO salt26_timetable(ymd,category,category_id,t1300) VALUES('20180731','booked','40','0') ON DUPLICATE KEY UPDATE t1300=0 ``` というような文字列となります。 この「具体的な文字列」を直接phpmyadminにて実行した場合には、正常動作します。 何がダメなのかをご教示いただける方、よろしくお願いいたします。
回答: まずいちばんだめなのはカラム名を指定するのに 外部からきたhやiを利用していること 外部からのデータは想定外のものが来る可能性が高く、 当然テーブルのカラム名に合致しないでしょう。 設計思想がまちがっているので、このテーブル構成では セキュアに処理はできません。 その上でmysqliの処理についてもprepare処理があるので bind_paramしながらプレースホルダーで対応してください