1

PHPでこのようなアップデートを実行したい

// pseudocode
UPDATE invoice SET due_date=? WHERE invoice_id=? AND creater_id=?;
IF AFFECTED_ROWS == 1 THEN
UPDATE invoice_item SET price=? WHERE invoice_id=?

セキュリティを強化するために、creater_id を追加して、ログインしたユーザーが請求書の作成者である場合にのみコードが更新されるようにしました。それ以外の場合、システムは更新されません。

私は当初、AFFECTED_ROWS を使用してこの状態を確認するつもりでした。しかし、最終的に多くの不満を抱いた後、すべての新しい値が古い値と同じである場合、AFFECTED_ROWS が 0 を返すことに気付きました。これは、invoice_item の値が異なっていても、更新されないことを意味します。

UPDATE の前に SELECT を実行する以外に、UPDATE がいずれかの行に一致したかどうかを教えてくれる SQL クエリまたは PHP 関数はありますか?

4

4 に答える 4

0

これを 1 つのクエリに戻すことができ、影響を受ける行について心配する必要はありません。

UPDATE
  invoice
  left join invoice_item on invoice_item.invoice_id = invoice.invoice_id
SET
  invoice.due_date = ?, -- the WHERE will only let this happen if it will be changed
  invoice_item.price = ? -- the WHERE will only let this happen if it will be changed
WHERE
  invoice.invoice_id = ?
  and invoice.creater_id = ?
  and invoice.due_date != ? -- here compare the new due_date to the one already in the db
于 2014-03-21T06:14:58.557 に答える