提问人:NeonSmash 提问时间:8/9/2021 更新时间:8/9/2021 访问量:43
如何检查两个查询是否成功执行?
How to check if both query excecuted successfully?
问:
我想将 INSTERT 分成 2 个不同的表。人们将填写一个表单,在其中输入他们的用户数据和他们的公司数据。我测试了这个表格,当一切正确时,它很好,但是......当用户数据正常,但公司数据有错误时,用户插入运行,我不想要它。反之亦然。 我现在的代码:(只是一个标记)
$sql = "INSERT INTO user (name, email, password) VALUES (:username, :email, :password)";
$stmt = $dbh->prepare($sql) {
... //bind parameters
if($stmt->execute()){
echo "Successfully registered user";
$sql = "INSERT INTO company (title, number, address) VALUES (:title, :number, :address)";
$stmt = $dbh->prepare($sql) {
... //bind parameters
if($stmt->execute()){
echo "Successfully registered company";
}
}
}
}
unset($stmt);
我想检查两者,如果没有错误,则运行两个查询。 如何嵌套它?
答:
1赞
kup
8/9/2021
#1
您可以使用 transactions , , 和 try 和 catch。beginTransaction
rollBack
commit
$dbh->beginTransaction()
try {
$sql = "INSERT INTO user (name, email, password) VALUES (:username, :email, :password)";
$stmt = $dbh->prepare($sql) {
... //bind parameters
if($stmt->execute()){
echo "Successfully registered user";
$sql = "INSERT INTO company (title, number, address) VALUES (:title, :number, :address)";
$stmt = $dbh->prepare($sql) {
... //bind parameters
if($stmt->execute()){
echo "Successfully registered company";
}
}
}
}
} catch(\Exception $e)
$dbh->rollBack();
}
$dbh->commit();
unset($stmt);
评论
0赞
Slava Rozhnev
8/9/2021
我认为应该在事务提交后移动成功消息。
-1赞
Adrian Mold
8/9/2021
#2
try {
$pdo->prepare($agr_query_string);
$commited = $pdo->commit();
if($commited){
echo "Success";
}else{
echo "Fail";
$pdo->rollBack();
}
} catch (PDOException $e) {
$pdo->rollBack();
print "rollBack : fail";
//throw new $e;
}
评论
1赞
ADyson
8/9/2021
请不要发布仅代码的答案。没有人能从中学到任何东西。如果您认为您的代码解决了问题,请添加一个描述,解释您更改了什么以及为什么。
0赞
ADyson
8/10/2021
好吧,我希望您实际上会编辑答案以改进它,而不仅仅是承认评论!
评论
// bind parameters