Php 在一个MySQL事务中,可以将一个查询的结果用于另一个查询吗?

Php 在一个MySQL事务中,可以将一个查询的结果用于另一个查询吗?,php,mysql,transactions,pdo,Php,Mysql,Transactions,Pdo,我正在使用PHP PDO和MySQL进行编码 在这种情况下,我是否可以编写一个事务来运行第一个查询(或一系列查询),然后将此查询的结果作为另一个查询的输入 例如,我想(1)在表a中创建一条新记录并获取自动递增的ID作为回报,(2)在表B中创建一条新记录并获取自动递增的ID作为回报,(3)在表C的两个字段中输入上面从表a和B生成的ID,这两个字段表示a和B之间的关系 我可以在一次交易中完成上述操作吗?另外,我可以在每个查询之间添加一些编程吗?简短回答:是 长答覆: 当然,这就是事务设计的目的 只要

我正在使用PHP PDO和MySQL进行编码

在这种情况下,我是否可以编写一个事务来运行第一个查询(或一系列查询),然后将此查询的结果作为另一个查询的输入

例如,我想(1)在表a中创建一条新记录并获取自动递增的ID作为回报,(2)在表B中创建一条新记录并获取自动递增的ID作为回报,(3)在表C的两个字段中输入上面从表a和B生成的ID,这两个字段表示a和B之间的关系


我可以在一次交易中完成上述操作吗?另外,我可以在每个查询之间添加一些编程吗?

简短回答:

长答覆:

当然,这就是事务设计的目的

只要您的SQL供应商支持事务(mysql在InnoDB表上支持),您就可以使用它们执行一系列查询

另外,我可以在每个查询之间添加一些编程吗

是的,但是,如果您正在更新某个第三方,您可以确保自己回滚更改

例如:

try {
  $db->beginTransaction();
  $db->exec('INSERT INTO tableA (id, column) VALUES (NULL, NOW())');
  $db->exec('SELECT id FROM tableB ORDER BY id DESC LIMIT 1');
  // ...
  $httpClient->post(sprintf('/notify/foo/%d?value=ok', $id));
  $db->commit();
} catch (\PDOException $e) {
    $db->rollback();
    $httpClient->post(sprintf('/notify/foo/%d?value=cancel', $id));
} 

请注意,您还可以嵌套事务,并在InnoDB表上使用
保存点。

简短回答:

长答覆:

当然,这就是事务设计的目的

只要您的SQL供应商支持事务(mysql在InnoDB表上支持),您就可以使用它们执行一系列查询

另外,我可以在每个查询之间添加一些编程吗

是的,但是,如果您正在更新某个第三方,您可以确保自己回滚更改

例如:

try {
  $db->beginTransaction();
  $db->exec('INSERT INTO tableA (id, column) VALUES (NULL, NOW())');
  $db->exec('SELECT id FROM tableB ORDER BY id DESC LIMIT 1');
  // ...
  $httpClient->post(sprintf('/notify/foo/%d?value=ok', $id));
  $db->commit();
} catch (\PDOException $e) {
    $db->rollback();
    $httpClient->post(sprintf('/notify/foo/%d?value=cancel', $id));
} 
请注意,您还可以嵌套事务并在InnoDB表上使用
保存点