首页 > 解决方案 > 仅在第一条语句完成后执行第二条语句

问题描述

从 mysql 表中首先要删除行。只有在删除行之后,我才想选择 sum(certain_column)。想确保在删除行之前,我不执行选择。

决定使用这样的代码:

try{ 

$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$db->beginTransaction();

try{ 
$stmt_delete = $db->prepare('DELETE FROM `table` WHERE `Id` = 1;');
$stmt_delete_items->execute( );
}
catch (PDOException $e){
echo "DataBase Error: " .htmlspecialchars( $e->getMessage() , ENT_QUOTES, "UTF-8").'<br>';
$db->rollBack();
exit;
}

try{ 
$stmt_select = $db->prepare('SELECT SUM(`Quantity`) AS `SumQuantity` FROM `table` WHERE `some_column` = 234;');
$stmt_select->execute( );
$arr_select = $stmt_select->fetchAll(PDO::FETCH_ASSOC);
}
catch (PDOException $e){
echo "DataBase Error: " .htmlspecialchars( $e->getMessage() , ENT_QUOTES, "UTF-8").'<br>';
}

$db->commit();
}

期待第一次执行$stmt_delete,然后才执行$stmt_select。在通常情况下,我会得到这样的执行顺序。但是能保证100%吗?在某处读取删除可能比选择花费更多时间...exit;只有在出现错误的情况下才会阻止下一次执行。但我需要推迟$stmt_select$stmt_delete

或者可能更好用START TRANSACTION; ... COMMIT;。或者可能是为了DELETE使用LOCK TABLES ... UNLOCK TABLES

请建议解决方案 100% 确保选择仅在删除完成后执行。

标签: mysqlpdo

解决方案


推荐阅读