Я надеюсь, что следующий код сможет прояснить, что я имею в виду:
Код: Выделить всё
$dbh->startTransaction();
$stmt = $dbh->prepare("DELETE FROM foo WHERE id=:id");
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
if (!$stmt->execute() || !bar($id)) {
$dbh->rollBack();
}
Я хочу быть уверенным в том, что bar() никогда не вызывается.
Я хочу быть уверенным в том, что bar() никогда не вызывается, когда $stmt не выполняется.
p>
Я знаю, что в некоторых языках оператор or вернет true в тот момент, когда !$stmt->execute() получит значение true, и я могу быть уверен, что bar() не будет вызываться, если !$stmt->execute() не будет оценен как false (это означает, что $stmt->execute() оценен как true и запрос был успешным).
Есть ли у меня такая уверенность в php или возможно, что сервер будет оценивать $stmt->execute() и bar($id) одновременно или в обратном порядке и таким образом нанести ущерб моей базе данных?
Я предполагаю, что смогу применить любой полученный ответ также и к оператору and. Если это не так, пожалуйста, скажите мне.
Подробнее здесь: https://stackoverflow.com/questions/627 ... -evaluates