プロが教える店舗&オフィスのセキュリティ対策術

MySQL 3.23.38 on Redhatです。
PHP4.2から、mysql_queryでsqlを送っています。

同じテーブルに、UPDATEを2回連続で行うと、
2回目で「0」を返して、整合性が取れません。

UPDATE table_name SET Note = REPLACE(Note,'<NEW>','') WHERE id = 1

UPDATE table_name SET Note = CONCAT(Note,'<NEW>') WHERE id = 1

見たいな感じです。
どうも2回目のUPDATEのCONCATの中のNoteが、「0」を返しています。

テーブルをロックしても、問題が解決されませんでした。

なにか良い方法があれば、教えてください。

A 回答 (1件)

根本的な解決方法ではなく、MySQLが関数のネストを許しているかも知りませんが、


UPDATE table_name
SET Note = CONCAT(REPLACE(Note,'<NEW>',''), '<NEW>')
WHERE id = 1
でこきたなく回避するのはどうでしょう?

ところで2度目のSQL文をなげているときコネクションが
有効どうか試してみました?replceの後に mysql_query("select Note from table_name where ID = 1" ) or die ("失敗");で試してみください。
参考にならなそうな意見で申し訳ないです。

この回答への補足

何回もやってみると、
はじめは、うまくいってなかったのですが、
だんだん成功率が増えて、
今では、ほぼ100%成功します。

telnet+mysqlでも接続しながら、
PHPから接続したのが悪いのでしょうか?

負荷の関係で、うまくいかないようでは、
このやり方は、まずいですね。

補足日時:2003/09/18 16:22
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

質問が悪かったです。
実際の動作では、はじめの方にWHEREが無く、
2回目で、必要な部分だけ、WHEREで指定するという感じで、指摘していただいた方法は、使えません。

それから、念のため、 or dieを使って見ましたが、
失敗しませんでした。

お礼日時:2003/09/18 16:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!