codeigniter4 / CodeIgniter4

Open Source PHP Framework (originally from EllisLab)
https://codeigniter.com/
MIT License
5.28k stars 1.88k forks source link

Dev: DatabaseException might not be thrown even if query fails #6913

Open kenjis opened 1 year ago

kenjis commented 1 year ago

SQLite3, Postgres and OCI8 drivers throw ErrorException when a query error occurs because of Error Handler. See #6912 https://github.com/codeigniter4/CodeIgniter4/blob/ac1422c404a364f9493bbf1b22dacb18e3913982/system/Debug/Exceptions.php#L174-L176 So depending on the value of the error reporting setting, the ErrorException may not be thrown.

See https://github.com/codeigniter4/CodeIgniter4/pull/6886#issuecomment-1328148614

kenjis commented 6 months ago

SQLite3

--- a/app/Config/Boot/testing.php
+++ b/app/Config/Boot/testing.php
@@ -14,7 +14,7 @@
  | make sure they don't make it to production. And save us hours of
  | painful debugging.
  */
-error_reporting(E_ALL);
+error_reporting(E_ALL & ~E_WARNING);
 ini_set('display_errors', '1');

 /*
$ vendor/bin/phpunit tests/system/Database/Live/TransactionTest.php 
PHPUnit 9.6.16 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.2.15
Configuration: /Users/kenji/work/codeigniter/official/CodeIgniter4-4.5/phpunit.xml

F...                                                                                                                         4 / 4 (100%)

Time: 00:00.231, Memory: 18.00 MB

There was 1 failure:

1) CodeIgniter\Database\Live\TransactionTest::testTransStartDBDebugTrue
Failed asserting that null is an instance of class "CodeIgniter\Database\Exceptions\DatabaseException".

/Users/kenji/work/codeigniter/official/CodeIgniter4-4.5/tests/system/Database/Live/TransactionTest.php:106

FAILURES!
Tests: 4, Assertions: 14, Failures: 1.

SQLSRV driver has different implementation. It throws Exception when the query return value is false.

This is correct. SQLite3, Postgres and OCI8 drivers should throw Exception when the query return value is false.