]> git.mxchange.org Git - friendica.git/commitdiff
New experimental database configurations
authorMichael <heluecht@pirati.ca>
Sun, 17 May 2020 09:03:56 +0000 (09:03 +0000)
committerMichael <heluecht@pirati.ca>
Sun, 17 May 2020 09:03:56 +0000 (09:03 +0000)
src/Database/Database.php
static/defaults.config.php

index 7adb88ffa87aec4c6d1cff7025b9b28ffc0a9596..4b39a13e68d3d578fb5e43705e70bd223bb1f18b 100644 (file)
@@ -135,8 +135,9 @@ class Database
                }
 
                $this->emulate_prepares = (bool)$this->configCache->get('database', 'emulate_prepares');
+               $this->pdo_emulate_prepares = (bool)$this->configCache->get('database', 'pdo_emulate_prepares');
 
-               if (class_exists('\PDO') && in_array('mysql', PDO::getAvailableDrivers())) {
+               if (!$this->configCache->get('database', 'disable_pdo') && class_exists('\PDO') && in_array('mysql', PDO::getAvailableDrivers())) {
                        $this->driver = 'pdo';
                        $connect      = "mysql:host=" . $server . ";dbname=" . $db;
 
@@ -150,7 +151,7 @@ class Database
 
                        try {
                                $this->connection = @new PDO($connect, $user, $pass);
-                               $this->connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
+                               $this->connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, $this->pdo_emulate_prepares);
                                $this->connected = true;
                        } catch (PDOException $e) {
                                $this->connected = false;
@@ -1029,7 +1030,7 @@ class Database
                $success = $this->e("LOCK TABLES " . DBA::buildTableString($table) . " WRITE");
 
                if ($this->driver == 'pdo') {
-                       $this->connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
+                       $this->connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, $this->pdo_emulate_prepares);
                }
 
                if (!$success) {
@@ -1062,7 +1063,7 @@ class Database
                $success = $this->e("UNLOCK TABLES");
 
                if ($this->driver == 'pdo') {
-                       $this->connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
+                       $this->connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, $this->pdo_emulate_prepares);
                        $this->e("SET autocommit=1");
                } else {
                        $this->connection->autocommit(true);
index d0725aa9bcdb2418f498ef9b2dc7e4a919d31436..4ef006496dbd4b7224663eca7ed0db6e6002c46b 100644 (file)
@@ -45,8 +45,23 @@ return [
                'database' => '',
 
                // charset (String)
-               // Database connexion charset. Changing this value will likely corrupt special characters.
+               // Database connection charset. Changing this value will likely corrupt special characters.
                'charset' => 'utf8mb4',
+
+               // emulate_prepares (Boolean) (Experimental)
+               // If enabled, prepared statements will be emulated.
+               // In combination with MySQLi this will cast all return values to strings.
+               'emulate_prepares' => false,
+
+               // pdo_emulate_prepares (Boolean) (Experimental)
+               // If enabled, the builtin emulation for prepared statements is used.
+               // Due to limitations of that emulation (all return values are casted as strings)
+               // this will most likely cause issues and should not be used on production systems.
+               'pdo_emulate_prepares' => false,
+
+               // disable_pdo (Boolean)
+               // PDO is used by default (if available). Otherwise MySQLi will be used.
+               'disable_pdo' => false,
        ],
        'config' => [
                // admin_email (Comma-separated list)