- ベストアンサー
UPDATEの記述について
お世話になります。 最近ようやく少しはPHPやMySQLに慣れてきたと思ったんですが・・・・ やはりまだまだで、UPDATE文で躓いています。 ---------------------------------------------------------- $up = "UPDATE DB名 SET check= '1',staff='$staff' where id='$idg' AND code='$codeg' AND shop='hoge'"; $rs = mysql_query($up); if($rs){ print "$idg $codeg $staff が検品処理実施<br>"; } else{ print "$idg $codeg $staff が書き込みNG\n<br>"; } ---------------------------------------------------------- 上記の記述はおかしいのでしょうか? 同じような記述で別のphpは動いているのですが・・。 何が原因かわからず悩んでいます。特に間違った記述をしてるとは 思えないのですが。 試しに変数を明示的にしてやってみても、やはりUPできないでした。 UPDATEの記述をする際、一番気をつけることは何でしょうか?? またどうすればうまくアップ出来るか・・・ よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
1 PC1-001<input type="checkbox" name="codeg" value="PC1-001"> 2 PC1-002<input type="checkbox" name="codeg" value="PC1-002"> 3 PC1-003<input type="checkbox" name="codeg" value="PC1-003"> としているということですか? 元のhtmlを書いてもらうと解説がしやすいかと。 1 PC1-001<input type="checkbox" name="codeg[]" value="PC1-001"> 2 PC1-002<input type="checkbox" name="codeg[]" value="PC1-002"> 3 PC1-003<input type="checkbox" name="codeg[]" value="PC1-003"> なら$_REQUEST["codeg"]は複数のデータを配列で受けられます。 配列を文字列におとして処理をする必要がでてきます。
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
好き嫌いにもよりますが、以下のようにすると間違いが見つけやすいです。 ・SQL文はすべて大文字にする。 ・データベース名やテーブル名、フィールド名はすべてバッククォーテーションでくくる。 ・データは基本的にシングルクォーテーションでくくる。 ・PHPからわたす変数には{}をつかう。 ・SQL文はヒアドキュメントをつかい、見やすいよう適当なところで改行する。 以上をふまえて $up =<<<eof UPDATE `DB名` SET `check`=1 ,`staff`='{$staff}' WHERE 1 AND `id`='{$idg}' AND `code`='{$codeg}' AND `shop`='hoge' eof; AND `shop`='hoge' のところはもしかして AND `shop`='{$hoge}' ってことはないですよね?
お礼
yambejp様、回答ありがとうございます。 記述内容、受けがちゃんとなってるか、確認出来ました。 ありがとうございます。 うまく変数は受けているのですが、やはりUPDATEは出来ないです・。 $sql="select * from DB名 where id='$idg' ~ "で、 mysql_num_row()でちゃんとあるのかを試して、やはり条件にあった データは存在します。 データはあるのに・・・更新できないなんて(涙) また頑張ってみます、ありがとうございます。 再度気づいた点ございましたら、回答お願い致します。
補足
今原因らしいのを見つけたような気がします。 元々$codeの中身は前処理から配列のデータを受けるように しているんですが、変数の中身が 例 code='PC1-004''PC1-002 と前処理のチェックボックスで選んだものが、全部一つのところに 受けているようです。 なので、うまく更新できないのではないかと・・。 ちなみに前処理は・・ 番号 名前 チェックボックス 1 PC1-001 ■ 2 PC1-002 ■ 3 PC1-003 ■ のようなチェックボックスで選択したものを受け、 チェックしたものを更新する処理です。
- briantaphy
- ベストアンサー率50% (1/2)
$up = "UPDATE DB名 SET check= '1',staff='" . $staff . "' where id='" . $idg . "' AND code='" . $codeg . "' AND shop='hoge'"; シングルとダブルのクォーテーションの違いだと思います。 上記でいけるかと思います。
お礼
briantaphy様、回答ありがとうございます。 試してみたのですが、やはりダメでした(TT コピペもしてみたのですが、やはりこちらもダメでした。 再度色々試してみます、ありがとうございます。m(__)m
お礼
色々試した結果、無事自分の想定してた 動きが完成しました。 原因かどうかはわからないのですが、テーブルの項目名が悪かった? ような気がします。 check → chkへ変更したらすんなり行きました。 こんなことってあるのでしょうか?? とりあえず解決できてうれしいです。 色々指南ありがとうございましたm(__)m
補足
yambejp様、またまた回答ありがとうございます。 #3の私の補足ですが、間違えでした。問題なく 配列のデータを一つ一つ受けて正常でした。 ・・しかしながら、どうしてもUPDATEが出来ないです。 yambejp様の上記にある配列を文字列の処理というのが 関係してますでしょうか??配列のデータをそのまま はwhereで条件で使ってもうまくいかないのでしょうか?? 今はこんなメッセージが出るようになってしまいました。 ----------------------------------------------------- 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 ''kenpin' SET check='1',kenpins='AOKI' where eggocode='PC1-002A' ----------------------------------------------------- バージョンがおかしいのでしょうか?? php4.4.4、mysql4.0.24を使用してます。