Доколкото разбирам, вие очаквате PDOException да бъде хвърлено, когато изразът не се изпълни. Но както виждам, изключение не се хвърля по подразбиране в такива случаи. Вижте как можете да промените това тук
Да предположим, че във вашия случай трябва да имате код като този:
$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.
Да предположим, че това ще работи добре за вас.
Моля, имайте предвид, че не трябва да използвате
$SqlQuery="INSERT INTO tab_photo VALUES('$PhotoID','$ProjectId','$Day','$barCode','$photoName','$PhotoXml')";
Вместо това трябва да използвате свързване на параметри:
$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);
Вижте това за повече подробности.