2014-01-14 66 views
1

我正在編寫一個腳本,用於更新客戶表中的記錄。顯示更新記錄SQL PHP

是否有一個優雅的方式來運行更新,只需打印更新的內容,而不是使用相同的WHERE CONDITION功能運行另一個SELECT

我知道如何做到這一點的唯一方法是首先進行選擇,然後更新select中的每條記錄,然後將其打印出來。

即:

if(isset($dry_run)) { 
    SELECT a, b, c, d FROM customer 
} 
else { 
    UPDATE CUSTOMER set d='blah' 
} 

這將是很好,如果UPDATE可以無需編寫代碼,並沒有返回結果集,我可以再打印出來,以顯示所有更新的記錄CUSTOMER_ID,名字,姓氏和電子郵件不止一次地擊中數據庫。有這樣的事情存在嗎?

- 編輯 -

由於共識不,不能這樣做 - 任何人都可以解釋爲什麼SQL不能捆綁更新的行成一個對象,你就可以遍歷並打印出?

+1

簡而言之:沒有。長答案:'UPDATE'不返回結果集。你需要做一個'SELECT'。 – 2014-01-14 07:14:51

+0

Darn :(它奇怪的是他們不能做一個'SELECT FOR UPDATE'或者類似的東西:( – FaddishWorm

+0

'select for update')用於鎖定交易中的字段,如果你只想做一個空運行,你不需要 –

回答

0

您可以使用一個選擇,而不是你更新

而不是做

UPDATE table set column1=value1, column2=value2 WHERE conditions 

你可以做

SELECT value1 as column1, value2 as column2 FROM table WHERE conditions 

,這將給你相同的結果。

+0

大聲笑,是的,我知道UPDATE和SELECT語句,謝謝......也許我沒有正確解釋......我想顯示什麼更新,而不必重新運行我的「dryrun」代碼/查詢 – FaddishWorm

+0

好吧,所以'update'不會返回值,它會更新數據庫中的值。我的意思是,你可以運行'select'來代替'update',並且你會得到可以修改的值。 –

1

爲什麼你需要更新?你應該可以爲此做一個選擇。例如,假設你要更新customer_id是有價值的記錄。您可以使用該值爲行(s)運行select。

+0

也許我沒有正確解釋...我想顯示什麼更新,而不必重新運行我的「dryrun」代碼/查詢 – FaddishWorm

+0

@FaddishWorm你仍然需要一個選擇查詢。您應該可以在條件中使用相同的條件(除非更新更改了其中一個條件字段的值)。 –

+0

是的,我有一個選擇查詢...多數民衆贊成但不是點雖然...我想轉儲更新後,我的更新1查詢 – FaddishWorm

0

反轉該代碼。

if(!isset($dry_run)) { 
    UPDATE CUSTOMER set d='blah' 
} 
SELECT a, b, c, d FROM customer 

並回答你的問題。更新和選擇操作是不同的。不需要讀取整個記錄來更新它們。

如果您確實需要,請編寫一個執行update和select的MySQL過程。

如果你想知道爲什麼它不能像你有光標讀寫的其他語言那樣工作,答案會更慢。

+0

再次錯過了這一點。也許不應該提到幹跑位 – FaddishWorm

0

如果您從客戶端獲取數據進行更新,爲什麼在更新查詢後需要重新提取數據。你的請求中已經有了這些數據讓它迴應。