![]() |
Database Error Handling - Printable Version +- CodeIgniter Forums (https://forum.codeigniter.com) +-- Forum: CodeIgniter 4 (https://forum.codeigniter.com/forumdisplay.php?fid=28) +--- Forum: CodeIgniter 4 Discussion (https://forum.codeigniter.com/forumdisplay.php?fid=31) +--- Thread: Database Error Handling (/showthread.php?tid=76160) |
Database Error Handling - next2heaven - 04-17-2020 Can I get an example of how you would handle an error...such as if the database table doesn't exist or a field is named wrong? Currently it throws a huge full page error. Just wondering how to see that there is an error and handle it on my own. RE: Database Error Handling - captain-sensible - 04-17-2020 couple of things to mention if in your index.php inside public you have $_SERVER['CI_ENVIRONMENT'] = 'development'; you will get loads of info on error. if you change that to: $_SERVER['CI_ENVIRONMENT'] = 'production '; its a different kettle of fish. There are different ways to handle possible errors ;but really wrong field or wrong table shouldn't be one of them since you are pretty much forced to get it right when you create a model. eg protected $table = 'portfolio'; protected $primaryKey = 'Id'; protected $allowedFields = ['image','imageTitle','slug']; there are things that have crossed my mind though such as when there are no records in database i've got around this in controller with tests such as : $handle= new PortfolioModel(); $mycount= $handle->count(); if($mycount == 0) { //do something } but if i deliberately spelt a field wrong eg for table in my model, then in a controller basic block try catch works try { $handle= new PortfolioModel(); $mycount= $handle->count(); } catch ( \Exception $e) var_dump($mycount); echo $e->getMessage(); { //here i got null } the level of output depends on whether you have development or production in index.php for above when index.php has in production mode output is just one line : NULL SQLite3::query(): Unable to prepare statement: 1, no such table: portfoliol RE: Database Error Handling - next2heaven - 04-17-2020 Ya, problem is that I have a specific unusual case where the user can actually specify the sql query via an admin (admin for developers only). So if they get the query wrong, I don't want it giving a bunch of errors or a blank response Error 500. Also, I'm using custom models that aren't the standard table reflected type. Meaning, I'm running custom queries and such. In that model or controller, the try/catch doesn't work. RE: Database Error Handling - MGatner - 04-22-2020 > In that model or controller, the try/catch doesn't work. Are you sure you are catching the right thing? Exceptions must be fully-qualified when you catch them from a namespace. You could try: try { $db->query($sql); } catch (\Throwable $e) { ... Notice the preceding \ on the class to catch. RE: Database Error Handling - next2heaven - 04-22-2020 Awesome! That was it! Thank you so much. Why the backslash? What does that do? RE: Database Error Handling - jreklund - 04-22-2020 \Throwable will load PHP built in class named Throwable. If we just specify Throwable it will try to load it within CodeIgniter. If you execute it in a Controller, it will try to find \App\Controller\Throwable instead, and give you an error. RE: Database Error Handling - next2heaven - 04-22-2020 Ah...that makes sense. Thank you! |