質問: $pdo -> prepare("insert into message (id,message,location) values(2,'message','test') ON DUPLICATE KEY UPDATE id=values(id), message=values(message),location=values(location)"); > $sql ->execute( > [htmlspecialchars($_REQUEST['message']),$_REQUEST['location']]); > ?> > ``` > >
回答: * prepareに投入しているSQLにパラメータがないのにexecuteでパラメータをセットしている のが問題。 あとは無意味なhtmlspecialcharsとか気にはなりますけどね。画面出力時に使うものであってDB登録時に使うものではありません。データを加工することになるわけですから。 「プリメアドステートメント」で調べて概念きちんと理解してください。 もちろん、prepareもexecuteもPHPマニュアルを確認して仕様を理解すること。 > > 2番があれば、アップデート、無ければインサートするといった運用を想定のSQLです。 > > > ひとつのSQLでやりきるより、SELECT COUNTかけて結果によりINSERT/UPDATEを切り換える 「できるやりかた」をまず実践された方が確実に進むと思います。