View source for DB driver: Error Mode

{{toc numerate=1}}

default error mode setting for DB driver:
%%
const DB_ERROR_MODE	= 0;		// DB error mode: 0 - silent, 1 - warning, 2 - exception
%%

===MySQLi===
https://wiki.php.net/rfc/mysqli_default_errmode
https://www.php.net/manual/en/mysqli-driver.report-mode.php
%%(info type="note" icon=0)As of PHP **8.1.0**, the default setting is MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT. Previously, it was MYSQLI_REPORT_OFF.%%

In other words MYSQLI_REPORT_STRICT will cause a FATAL ERROR for a missing table, field or syntax error. Who wants this in an production environment by default - I don't get it.

Sets mysqli error reporting mode.
#|
*| Name | Description |*
|| ##MYSQLI_REPORT_OFF## | Turns reporting off ||
|| ##MYSQLI_REPORT_ERROR## | Report errors from mysqli function calls ||
|| ##MYSQLI_REPORT_STRICT## | Throw mysqli_sql_exception for errors instead of warnings ||
|| ##MYSQLI_REPORT_INDEX## | Report if no index or bad index was used in a query ||
|| ##MYSQLI_REPORT_ALL## | Set all options (report all) ||
|#

Add option to turn reporting off by default.
%%(php)
<?php

$options = match (DB_ERROR_MODE)
{
	0	=> MYSQLI_REPORT_OFF,
	1	=> MYSQLI_REPORT_ERROR,
	2	=> MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT,
};

mysqli_report($options);
%%

Setting the MySQLi error reporting to off avoids fatal errors due to uncaught exceptions and maintains the current behavior.

===PDO===
https://wiki.php.net/rfc/pdo_default_errmode
https://www.php.net/manual/en/pdo.error-handling.php

**PDO::ATTR_ERRMODE**: This attribute is used for error reporting. It can have one of the following values.
#|
*| Name | Description |*
|| ##PDO::ERRMODE_SILENT## | If the ATTR_ERRMODE is not set in the code, ERRMODE_SILENT is the default value of ATTR_ERRMODE attribute. It sets error codes. In silent mode, if there is an error in SQL, PDO will throw no exceptions; PDO will issue no warnings; it will simply return false. Value of PDO::ERRMODE_SILENT is 0. The script will run without generating any error or warning. ||
|| ##PDO::ERRMODE_WARNING## | This value raises E_WARNING. In warning mode, if there is an error in SQL, PDO will issue warnings but script will continue running. Value of PDO::ERRMODE_WARNING is 1. The script will run with generating warning about the error. ||
|| ##PDO::ERRMODE_EXCEPTION## | This value throws exceptions. In exception mode, if there is an error in SQL, PDO will throw exceptions and script will stop running. Value of PDO::ERRMODE_EXCEPTION is 2. The script will stop executing generating the error which throws the exception. ||
|#

%%(php)
<?php

$options = match (DB_ERROR_MODE)
{
	0	=> [PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT],
	1	=> [PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING],
	2	=> [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION],
};

try
{
	$this->dblink = new PDO($dsn, $config->db_user, $config->db_password, $options);
}
catch (PDOException $e)
{
	die('PDO DSN Error: ' . $e->getMessage());
}
%%