diff --git a/app/Models/DatabaseDAO.php b/app/Models/DatabaseDAO.php index fe922cb82..0062c23e8 100644 --- a/app/Models/DatabaseDAO.php +++ b/app/Models/DatabaseDAO.php @@ -222,6 +222,18 @@ class FreshRSS_DatabaseDAO extends Minz_ModelPdo { return str_contains($this->version(), 'MariaDB'); } + /** + * @return bool true if the database PDO driver returns typed integer values as it should, false otherwise. + */ + final public function testTyping(): bool { + $sql = 'SELECT 2 + 3'; + if (($stm = $this->pdo->query($sql)) !== false) { + $res = $stm->fetchAll(PDO::FETCH_COLUMN, 0); + return ($res[0] ?? null) === 5; + } + return false; + } + public function size(bool $all = false): int { $db = FreshRSS_Context::systemConf()->db; diff --git a/app/install.php b/app/install.php index c2fd86370..3d835d1f1 100644 --- a/app/install.php +++ b/app/install.php @@ -234,6 +234,17 @@ function saveStep3(): bool { $ok = false; try { + Minz_ModelPdo::$usesSharedPdo = false; + $databaseDAO = FreshRSS_Factory::createDatabaseDAO(Minz_User::INTERNAL_USER); + if (!$databaseDAO->testTyping()) { + $message = 'Invalid PDO driver behaviour for selected database type!'; + if (Minz_Session::paramString('bd_type') === 'mysql') { + $message .= ' MySQL requires mysqlnd.'; + } + throw new Exception($message); + } + Minz_ModelPdo::$usesSharedPdo = true; + $ok = FreshRSS_user_Controller::createUser( Minz_Session::paramString('default_user'), '', //TODO: Add e-mail @@ -249,6 +260,7 @@ function saveStep3(): bool { $ok = false; } if (!$ok) { + checkStep(); return false; } @@ -526,7 +538,7 @@ function printStep2(): void {
= _t('gen.short.ok') ?> = _t('install.bdd.conf.ok') ?>
= _t('gen.short.damn') ?> = _t('install.bdd.conf.ko'), - (empty($_SESSION['bd_error']) || !is_string($_SESSION['bd_error']) ? '' : ' : ' . $_SESSION['bd_error']) ?>
+ (empty($_SESSION['bd_error']) || !is_string($_SESSION['bd_error']) ? '' : ' ' . $_SESSION['bd_error']) ?>