Pelo que entendi, você espera que PDOException seja lançada quando a instrução falhar na execução. Mas, como posso ver, a exceção não é lançada por padrão nesses casos. Veja como você pode alterar isso aqui
Suponha que no seu caso você deva ter um código como este:
$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.
Suponha que isso funcione bem para você.
Observe que você não deve usar
$SqlQuery="INSERT INTO tab_photo VALUES('$PhotoID','$ProjectId','$Day','$barCode','$photoName','$PhotoXml')";
Em vez disso, você deve usar a associação de parâmetros:
$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);
Veja este para mais detalhes.