2015-05-05 95 views
1

之前得到用PHP可能導致錯誤我已經審查了大部分與我的關心MySQL的 - 查詢執行

mysql explain delete?

detect mysql errors without executing it

大多數例子主題只是使用SELECT語句。我的大約是UPDATEDELETE

有沒有辦法在執行前使用PHP檢查更新/刪除查詢以獲取可能的錯誤返回?

我的問題是關於foreign key constraint

我已經有了PHP腳本,但現在我想嘗試使用EXPLAIN。

之前我使用mysql_error()來獲取錯誤,但當然必須執行查詢來獲取錯誤並將其轉化爲可理解的消息。

可以說,我怎樣才能使用「解釋刪除...」聲明得到一些關於錯誤的信息?
還是「說明」正確的工具?

查詢:Delete From project

我有另一個表叫project_assignment索引FK到項目表的Project_ID,並有它的數據。

現在,我只拿到了這個

id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra 
1 |SIMPLE  |NULL | NULL | NULL   | NULL| NULL | NULL|2  | Deleting all rows 
+2

如何知道它是否會在嘗試之前得到錯誤? – Barmar

+3

'EXPLAIN'用於顯示查詢優化器計劃如何執行查詢。你爲什麼期望它與檢測錯誤有關? – Barmar

+0

@Barmar ..我正在考慮,但正如我上面提到的,一些關於相關主題的評論陳述了使用Explain ..並且使我對如何應用或使用它感到困惑。那麼,你的意思是它不可能使用Explain? thnx – Raf

回答

3

EXPLAIN不是爲工作的工具。

看看使用MySQL Transactions。這使您可以「樂觀地」執行一系列查詢,然後執行事務。當你這樣做時,你會被告知任何錯誤。如果發生錯誤,整個事務將被回滾。

我想大多數用於'解釋'之前,UPDATEDELETE查詢可以通過交易解決。

在純SQL,這看起來像:

START TRANSACTION; 
SELECT ...; 
UPDATE ...; 
DELETE ...; 
COMMIT; 

使用PHP的mysqli,您可以使用mysqli::begin_transactionmysqli::commitmysqli::rollback

這個優秀的StackOverflow答案PHP + MySQL transactions examples顯示瞭如何在mysqli中使用事務。答案解釋瞭如何使用PHP mysqli編寫交易,如下所示:

try { 
    $db->beginTransaction(); 

    $db->query('SELECT ...'); 
    $db->query('UPDATE ...'); 
    $db->query('DELETE ...'); 

    $db->commit(); 
} catch (Exception $e) { 
    $db->rollback(); 
}