仅在第一条语句完成后才执行第二条语句

时间:2019-10-03 06:23:48

标签: mysql pdo

首先要从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;进行某处读取删除操作可能比select ...花费更多的时间,只有在出错的情况下,我才阻止下一次执行。但是我需要将$stmt_select延迟到$stmt_delete

或者使用START TRANSACTION; ... COMMIT;可能更好。或者可以让DELETE使用LOCK TABLES ... UNLOCK TABLES

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

0 个答案:

没有答案