При выполнении подготовленного запроса PDO с параметром emulate_prepares, равным false, со столбцом даты и оператором объединения поле даты возвращается некорректно (например, ожидаемый результат: 2019-10-02, фактический результат: \ xe3 \ x07 \ n\ x02)
Запрос выполняется должным образом, для emulate_prepares задано значение true.
Версия PHP: 7.2.19-0ubuntu0.18.04.2 Версия БД: 10.1.41-MariaDB-0ubuintu0.18.04. 1
Ниже приведен очень простой запрос для демонстрации проблемы, но обычно этот запрос выполняется для реальной таблицы с реальными данными. Одна и та же проблема проявляется в обоих случаях.
<?php
$options= [
PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_BOUND,
PDO::ATTR_EMULATE_PREPARES => FALSE
];
$db = new PDO('mysql:host=localhost;dbnam=db;charset=utf8', user, password, $options);
$stmt = $db->prepare("
SELECT CURRENT_DATE AS 'date' FROM DUAL
UNION ALL
SELECT CURRENT_DATE FROM DUAL");
$stmt->bindColumn("date", $date);
$stmt->execute();
while($stmt->fetch())
{
print $date."<br>";
}
Results for PDO:ATTR_EMULATE_PREPARES = FALSE
�
�
Results for PDO:ATTR_EMULATE_PREPARES = TRUE
2019-10-02
2019-10-02
Дата будет возвращена правильно, если я удалю Union.