/** @var PDO|mysqli */
protected $connection;
protected $driver;
- protected $emulate_prepares = false;
protected $pdo_emulate_prepares = false;
private $error = false;
private $errorno = 0;
$persistent = (bool)$this->configCache->get('database', 'persistent');
- $this->emulate_prepares = (bool)$this->configCache->get('database', 'emulate_prepares');
$this->pdo_emulate_prepares = (bool)$this->configCache->get('database', 'pdo_emulate_prepares');
if (!$this->configCache->get('database', 'disable_pdo') && class_exists('\PDO') && in_array('mysql', PDO::getAvailableDrivers())) {
switch ($this->driver) {
case self::PDO:
// If there are no arguments we use "query"
- if ($this->emulate_prepares || count($args) == 0) {
+ if (count($args) == 0) {
if (!$retval = $this->connection->query($this->replaceParameters($sql, $args))) {
$errorInfo = $this->connection->errorInfo();
$this->error = $errorInfo[2];
$can_be_prepared = in_array($command, ['select', 'update', 'insert', 'delete']);
// The fallback routine is called as well when there are no arguments
- if ($this->emulate_prepares || !$can_be_prepared || (count($args) == 0)) {
+ if (!$can_be_prepared || (count($args) == 0)) {
$retval = $this->connection->query($this->replaceParameters($sql, $args));
if ($this->connection->errno) {
$this->error = $this->connection->error;
// 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)
+ // pdo_emulate_prepares (Boolean)
// 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.
+ // When enabled, a workaround is used to ensure that the returned field types are correct,
+ // since by standard all returned values are casted as strings.
'pdo_emulate_prepares' => false,
// disable_pdo (Boolean)