2015-05-05 98 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(); 
}