Merge pull request #8649 from annando/annando/issue8550
Issue 8550: New experimental database configurations
This commit is contained in:
commit
90b1355555
3 changed files with 23 additions and 5 deletions
|
@ -135,8 +135,9 @@ class Database
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->emulate_prepares = (bool)$this->configCache->get('database', 'emulate_prepares');
|
$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';
|
$this->driver = 'pdo';
|
||||||
$connect = "mysql:host=" . $server . ";dbname=" . $db;
|
$connect = "mysql:host=" . $server . ";dbname=" . $db;
|
||||||
|
|
||||||
|
@ -150,7 +151,7 @@ class Database
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$this->connection = @new PDO($connect, $user, $pass);
|
$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;
|
$this->connected = true;
|
||||||
} catch (PDOException $e) {
|
} catch (PDOException $e) {
|
||||||
$this->connected = false;
|
$this->connected = false;
|
||||||
|
@ -1046,7 +1047,7 @@ class Database
|
||||||
$success = $this->e("LOCK TABLES " . DBA::buildTableString($table) . " WRITE");
|
$success = $this->e("LOCK TABLES " . DBA::buildTableString($table) . " WRITE");
|
||||||
|
|
||||||
if ($this->driver == 'pdo') {
|
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) {
|
if (!$success) {
|
||||||
|
@ -1079,7 +1080,7 @@ class Database
|
||||||
$success = $this->e("UNLOCK TABLES");
|
$success = $this->e("UNLOCK TABLES");
|
||||||
|
|
||||||
if ($this->driver == 'pdo') {
|
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");
|
$this->e("SET autocommit=1");
|
||||||
} else {
|
} else {
|
||||||
$this->connection->autocommit(true);
|
$this->connection->autocommit(true);
|
||||||
|
|
|
@ -45,8 +45,23 @@ return [
|
||||||
'database' => '',
|
'database' => '',
|
||||||
|
|
||||||
// charset (String)
|
// 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',
|
'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' => [
|
'config' => [
|
||||||
// admin_email (Comma-separated list)
|
// admin_email (Comma-separated list)
|
||||||
|
|
|
@ -56,6 +56,8 @@ class StaticDatabase extends Database
|
||||||
$this->driver = 'pdo';
|
$this->driver = 'pdo';
|
||||||
$this->connection = self::$staticConnection;
|
$this->connection = self::$staticConnection;
|
||||||
$this->connected = true;
|
$this->connected = true;
|
||||||
|
$this->emulate_prepares = false;
|
||||||
|
$this->pdo_emulate_prepares = false;
|
||||||
|
|
||||||
return $this->connected;
|
return $this->connected;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue