【问题标题】:insert into two tables at the same time同时插入两个表
【发布时间】:2013-05-06 14:17:38
【问题描述】:

我必须一次插入两张表,假设一张表是我的 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();

【问题讨论】:

  • 创建存储过程或函数。
  • 您标记问题的方式非常不寻常。它不仅吸引了较少的关注,而且还无法详细回答,因为没有人知道您正在使用的技术。

标签: pdo insert


【解决方案1】:

做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

【讨论】:

  • 好的,我想我明白了。我会试试的。谢谢。我会给你反馈。
猜你喜欢
  • 1970-01-01
  • 2015-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多