2013-05-12 69 views
0

我必须一次插入两个表,假设一个表是我的client_enquiry,另一个表是client_materials。 直到这里没关系,INSERT命令在两个表中都有效。如果我插入第二个表(client_materials)时发生了什么不好的事情?如果INSERT命令在表client_materials上失败,我该如何“回收”? 基本上我有这个:同时插入到两个表中

$sql_table1 = "INSERT INTO client_enquiry (reference, date) VALUES ('REF', '2013-05-12')"; 
$q = $conn->prepare($sql_table1); 
$q ->execute(); 

$Last_ID = $conn->lastInsertId('id_enquiry'); 

$sql_table2 = "INSERT INTO client_materials (id_client_enquiry,description, date) 
    VALUES (".$Last_ID."'Description', '2013-05-12')"; 
$q = $conn->prepare($sql_table2); 
$q -> execute(); 
+0

创建一个存储过程或函数。 – hjpotter92 2013-05-12 11:41:13

+0

你能举例吗? – 2013-05-12 11:59:03

+1

您标记问题的方式非常不寻常。它不仅没有引起注意,而且也无法详细回答,因为没有人知道你正在使用的技术。 – 2013-05-12 12:04:43

回答

2

the very rollback you mentioned

$conn->beginTransaction(); 
try 
{ 
    $sql = "INSERT INTO client_enquiry (reference, date) VALUES (?,?)"; 
    $q = $conn->prepare($sql); 
    $q ->execute(array('REF', '2013-05-12')); 

    $Last_ID = $conn->lastInsertId(); 

    $sql_table2 = "INSERT INTO client_materials (id_client_enquiry,description, date) 
        VALUES (?,?,?)"; 
    $q = $conn->prepare($sql); 
    $q -> execute(array($Last_ID, 'Description', '2013-05-12')); 

    $conn->commit(); 

} 
catch (PDOException $e) 
{ 
    $conn->rollback(); 
    throw $e; 
} 

你只需要确保引擎支持交易和PDO is set into exception throwing mode

+0

好吧,我想我明白了。我会尝试。谢谢。我会给你反馈。 – 2013-05-12 12:23:55