PDO::exec()
функцията връща броя на засегнатите редове, включително 0, ако няма засегнати редове.
Ред като този ще die()
защото exec
ще върне 0
което се тълкува като булева false.
$dblink->exec("UPDATE `sometable` SET `somecolumn`=0 WHERE `somecolumn`=0") or die("Never use die for error handling.");
Най-добрата практика за обработка на грешки за PDO е да се използват PDO изключения. Активирайте PDO изключения (на клас PDOException, вижте документи) по следния начин:
//enable Exception mode (uncaught exceptions work just like die() with the benefit of giving you details in logs of where execution was stopped and for what reason)
$pdoDBHandle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Премахнете or die()
и exit();
и активирайте режима на изключение. Обзалагам се, че това ще реши вашия "странен" проблем. Също така разгледайте хвърлянето на изключения в PHP, дори с процедурен код (за замяна на die()
и exit()
.
BTW exit
спира изпълнението точно както die
, освен че е полезен в режим CLI, защото връща код за успех/грешка на операционната система. Той наистина не е предназначен за обработка на грешки.