Php execute是否中断PDO事务?
我正在将用户输入写入2个MySQL表,如下所示: (a) 在表a中插入一些数据 (b) 获取最后插入的ID (c) 将其他数据插入表B 我有:Php execute是否中断PDO事务?,php,mysql,pdo,Php,Mysql,Pdo,我正在将用户输入写入2个MySQL表,如下所示: (a) 在表a中插入一些数据 (b) 获取最后插入的ID (c) 将其他数据插入表B 我有: $this->conn->beginTransaction(); $stmt = $this->conn->prepare(" INSERT INTO requests ($creation_da
$this->conn->beginTransaction();
$stmt = $this->conn->prepare("
INSERT INTO requests
($creation_date, etc...) // some data
VALUES(:creation_date, etc..);"); // some values
$stmt->bindparam(":creation_date",$creation_date);
...
$stmt->execute();
在这一点上,我最终需要的是得到最后一个insertid,
但它似乎只有在第一次$stmt->execute()
之后才可用,否则它将返回0,因为事务中的特定操作尚未实际启动(否则请确认)
进一步代码如下:
$lastInsertId = $this->conn->lastInsertId();
$stmt = $this->conn->prepare("
INSERT INTO other_requests
(requests_id,...) // some more data
VALUES(:requests_id,...);"); // some more values
$stmt->bindparam(":requests_id", $lastInsertId);
$stmt->bindparam(...); // some more bindings
$stmt->execute();
$this->conn->commit();
问题:
$stmt->execute()代码>在事务代码的中间以某种方式中断事务。我的理解是,它不应该——但到目前为止,还没有找到任何好的证据证明这一点
希望现在一切都清楚了。
$stmt->execute(['requests\u id'=>$lastInsertId])代码>。不过,你在帖子中没有提出任何问题。没有什么可回答的。它不应该回答,事务只有在回滚或提交时才会中断,提交使您对数据库的更改永久化,而回滚使您的数据库状态恢复到开始事务之前的状态。@mendez7如果发生错误,它也会“中断”。看起来不像“代码太多”对我来说。就我个人而言,我会将SQL文本的生成分离成单独的代码行和变量,然后将该变量传递到prepare
。这为我提供了一个方便的调试点,记录(或发出)生成的SQL文本。就个人而言,我会使用bindValue
代替bindParam
。我将假设$creation\u date
可以保证安全地包含在SQL文本中,并且我们不开放SQL注入。大家好,感谢大家的想法和评论,有了这些想法真的很有用@spencer7593将sql查询与$sql var分开,我肯定会这样做。谢谢<代码>$stmt->execute(['requests\u id'=>$lastInsertId])代码>。不过,你在帖子中没有提出任何问题。没有什么可回答的。它不应该回答,事务只有在回滚或提交时才会中断,提交使您对数据库的更改永久化,而回滚使您的数据库状态恢复到开始事务之前的状态。@mendez7如果发生错误,它也会“中断”。看起来不像“代码太多”对我来说。就我个人而言,我会将SQL文本的生成分离成单独的代码行和变量,然后将该变量传递到prepare
。这为我提供了一个方便的调试点,记录(或发出)生成的SQL文本。就个人而言,我会使用bindValue
代替bindParam
。我将假设$creation\u date
可以保证安全地包含在SQL文本中,并且我们不开放SQL注入。大家好,感谢大家的想法和评论,有了这些想法真的很有用@spencer7593将sql查询与$sql var分开,我肯定会这样做。谢谢