Jak rozumiem, spodziewasz się, że PDOException zostanie zgłoszony, gdy wykonanie instrukcji nie powiedzie się. Ale jak widzę, w takich przypadkach wyjątek nie jest domyślnie rzucany. Zobacz, jak to zmienić tutaj
Załóżmy, że w twoim przypadku powinieneś mieć taki kod:
$conn = new PDO($connection_string);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // this will force PDO to throw exception when SQL statement fails instead of simply setting an error.
Załóżmy, że to zadziała dobrze.
Pamiętaj, że nie powinieneś używać
$SqlQuery="INSERT INTO tab_photo VALUES('$PhotoID','$ProjectId','$Day','$barCode','$photoName','$PhotoXml')";
Zamiast tego powinieneś użyć wiązania parametrów:
$SqlQuery="INSERT INTO tab_photo VALUES(:PhotoID,:ProjectId,:Day,:barCode,:photoName,:PhotoXml)";
$stmt = $conn->prepare($SqlQuery);
$conn->beginTransaction();
$stmt->execute(array(':PhotoID' => $PhotoID, ':ProjectId' => $ProjectId, ....));
sleep(1);
Zobacz to po więcej szczegółów.