Правилен подход при mysql stmt грешка

anonimen

Super Moderator
Може би малко смешен въпрос, но какво правите, когато някоя заявка върне false? По-точно говоря за случаите, в които се логва/записва нещо.

Например имам един insert, логващ влизането на потребителя. Логически не трябва да извеждам никакво съобщение за грешка, ако заявката се провали. Това по никакъв начин не влияе на юзера.
Дори изглежда невъзможно една толкова проста заявка да гръмне:
PHP:
query('INSERT INTO logins (user_id) VALUES(?)');
Просто един insert, какво ще се обърка? Но ръцете ме сърбят да напиша това:

PHP:
$res = query('...');
if(!$res) {
   // какво да стои тук??
}
 
Реално погледнато нищо не правя аз. Просто прихващам ерорите и ексепшъните филтрирам ги и извеждам проблема бил той и Notice като прекъсвам изпълнението на останалият код и визуализирам определен темплейт.

PHP:
set_exception_handler(array($this, 'exceptionHandler'));
set_error_handler(array($this, 'errorHandler'));

Естествено можеш да си изведеш собствена грешка която да визуализираш но незнам според зависи е при мен. :)
 
Демек е най-добре да прекъсна действието?

Ако не успея да логна действието, прекратявам го дори самото действие да е успешно?
Всъщност май това е най-добрия вариант...
 
anonimen каза:
Демек е най-добре да прекъсна действието?

Ако не успея да логна действието, прекратявам го дори самото действие да е успешно?
Всъщност май това е най-добрия вариант...

Определено! Няма как да ти изтрещи някаква грешка била тя SQL синтактична или конекцията се е скапала или още много и да продължиш изпълнението на кода си. Трещиш някакъв ерор и слагаш exit(); Няма смисъл по-надолу да се изпълнява системата. Така или иначе заради грешката може да се появи цяла страница с Notice или Warning грешки които така или иначе ще обработваш. Посто прихващаш всички грешки и трещиш. Както ти казах при мен дори Notice да има за забравена някаква неинициализирана променлива, директно треща и спирам. Не ми е логично на мен да има някаква не инициализирана променлива и кода да продължава изпълнението си. Просто така си спестяваш последващи проблеми. Естествено щом се стигне до проблем като този който си описъл ако имаме кода:
PHP:
$res = query('...');

if(!$res) {

   // какво да стои тук??

}
Ако тресне някакъв фатален ерор то if(!$res){ може да се изпълни може и да не се изпълни и директно да спре. Тоест ерорати ще бъде необработен и може да даде лоша неподходяща информация на даден човек който нарочно я е предизвикал.
PHP:
set_exception_handler(array($this, 'exceptionHandler'));

set_error_handler(array($this, 'errorHandler'));

function exceptionHandler(){

}



function errorHandler(){

}
$res = query('...');
Eстествено горният код е грешен и функцииите получават параметри а да не говорим че съм дал кода за инициализиране на методи в клас но да схванеш смисъла.
 
Ок мерси за информацията, ще разгледам за set_error/exception_handler, не бях попадал досега на тях, изглеждат удобни... :roll:
Даже като гледам всичко отива там независимо дали има error_reporting
 
anonimen каза:
Ок мерси за информацията, ще разгледам за set_error/exception_handler, не бях попадал досега на тях, изглеждат удобни... :roll:
Даже като гледам всичко отива там независимо дали има error_reporting
Да до колкото съм се ровил и от личен опит дали има или няма error_reporting всичко отива за обработка към функциите. :) Тоест точно заради това ги харесвам защото спирам всичко докато грешката не бъде отстранена като си пращам и в ерор лога пълното инфо за ексепшъна.
 

Back
Горе