- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:mmysql のupdate構文でプレイスホルダを使用したとき)
mmysql のupdate構文でプレイスホルダを使用したとき
このQ&Aのポイント
- phpとmysqlでプログラミングをしています。updateでプレイスホルダを使用して特定のデータを更新したいのですが、WHEREによる条件指定をどこに書いてよいのかわかりません。
- 以下のようにWHERE no=$noをいろいろなところに突っ込んで実行しますが、更新されずにデータが新規に追加されてしまいます。正しい書き方を教えていただけないでしょうか?
- public function updContent($data){ $no = array_pop($data); $r = $this->db->query("SET NAMES sjis"); $sth = $this->db->prepare("UPDATE $this->bbs SET ( fdate, unit, division, title, content) WHERE no=$no VALUES(?,?,?,?,?)"); $rs = $this->db->execute($sth,$data); if(DB::isError($rs)){ print_r($data); print"<br />"; die(__FUNCTION__ . "<br /> 更新失敗:".$rs->getDebugInfo()); } return 1; }
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
今手元にテスト環境がないので、実証できず推測になってしまうのですが UPDATE構文が間違っているように思うのですが。 update bbs_table set(fdate, unit, division, title, content) WHERE no=$no VALUES(?,?,?,?,?); になってますが、updateは update bbs_table set fdate=?, unit=?, divistion=?, title=?, content=? where no=$no; になるんじゃないでしょうか? プリペアとかPHPではなく、やろうとしているSQL文で希望通りの動作しますか? insertとして扱われてしまっているんじゃないか?と思うのですが。 (updateをinsertにするとSQL文になるため)
お礼
回答ありがとうございます。 おっしゃるとおり構文が間違っていました。 $sth = $this->db->prepare("UPDATE $this->bbs SET fdate=?, unit=?, division=?, title=?, content=? WHERE no=?"); $rs = $this->db->execute($sth,$data); 上記のように修正して無事更新できました。 ありがとうございました。