Тема: PDO не виконується запит на вибірку

Є такий запит

SELECT * FROM _DataToExport WHERE 
STR_TO_DATE(_telegramTime, '%Y-%m-%d %H:%i') > STR_TO_DATE("2020-07-16 00:00", '%Y-%m-%d %H:%i') && 
STR_TO_DATE(_telegramTime, '%Y-%m-%d %H:%i') < STR_TO_DATE("2020-07-17 00:00", '%Y-%m-%d %H:%i');

Він виконується в mysql workbench, але чомусь не виконується в php pdo (повертає пустий масив), помилки також немає.

До БД конекчуся так

$dsn = 'mysql:host=' . host . ';dbname=' . dbname . ';charset=' . charset;
        $opt = [
            PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            PDO::ATTR_EMULATE_PREPARES   => false,
        ];
        $this->pdo = new PDO($dsn, username, password, $opt);

Функція для отримання даних виглядає так

    function GetData()
    {
        global $db;
        $cmd = file_get_contents(ABSPATH . 'Resource/MySQLCommands/GetDataToExport.sql');

        $pdoStatement = $db->pdo->prepare($cmd);

/*тут, потім, буду bindparam викликати */

        $pdoStatement->execute();

        return $pdoStatement->fetchAll(PDO::FETCH_ASSOC);
    }

Те що я все правильно підключив - це точно, перевіряв, замінив запит на SELECT 'ok'; в GetDataToExport отримав відповідь ок.

Що не так ?

2

Re: PDO не виконується запит на вибірку

Так якщо ви використовуєте prepare statement, то обов'язково повинні прописати параметри для bindParam в SQL запиті, ну і викликати сам метод bindParam() зі значеннями параметрів.

Якщо ваш запит не містить вхідних даних від користувача, то й prepare statement для фільтрації не потрібен

3

Re: PDO не виконується запит на вибірку

VTrim написав:

Так якщо ви використовуєте prepare statement, то обов'язково повинні прописати параметри для bindParam в SQL запиті, ну і викликати сам метод bindParam() зі значеннями параметрів.

Якщо ваш запит не містить вхідних даних від користувача, то й prepare statement для фільтрації не потрібен

З параметрами теж не працює

    function GetData()
    {
        global $db;
        $cmd = file_get_contents(ABSPATH . 'Resource/MySQLCommands/GetDataToExport.sql');

        $pdoStatement = $db->pdo->prepare($cmd);

        $pdoStatement->bindParam(':_startDate', $this->beginDate, PDO::PARAM_STR);
        $pdoStatement->bindParam(':_endDate', $this->endDate, PDO::PARAM_STR);

        $pdoStatement->execute();

        return $pdoStatement->fetchAll(PDO::FETCH_ASSOC);
    }
SELECT _userId, _username, _firstName,
_lastName, _telegramTime, _serverTime,
_day, _context
FROM _DataToExport WHERE
STR_TO_DATE(_telegramTime, '%Y-%m-%d %H:%i') > STR_TO_DATE(CONCAT(:_startDate, " 00:00"), '%Y-%m-%d %H:%i') &&
STR_TO_DATE(_telegramTime, '%Y-%m-%d %H:%i') < STR_TO_DATE(CONCAT(:_endDate, " 00:00"), '%Y-%m-%d %H:%i');

4

Re: PDO не виконується запит на вибірку

перевіряли доступність $this->beginDate, $this->endDate в методі?
Що у вас там, клас? Даєте шматки коду

5

Re: PDO не виконується запит на вибірку

І ще синтаксис CONCAT(:_startDate, " 00:00") підозріло виглядає, ймовірно повинно бути CONCAT(":_startDate", " 00:00")
Бо ви вставляєте назву як аргумент - назву поля, а треба як рядок.

6

Re: PDO не виконується запит на вибірку

class AbstractExport
{
    public $beginDate;
    public $endDate;

    function GetData()
    {
        global $db;
        $cmd = file_get_contents(ABSPATH . 'Resource/MySQLCommands/GetDataToExport.sql');

        $pdoStatement = $db->pdo->prepare($cmd);

        echo '$this->beginDate = ' . $this->beginDate . ' $this->endDate = ' . $this->endDate . '| ';

        $pdoStatement->bindParam(':_startDate', $this->beginDate, PDO::PARAM_STR);
        $pdoStatement->bindParam(':_endDate', $this->endDate, PDO::PARAM_STR);

        $pdoStatement->execute();

        return $pdoStatement->fetchAll(PDO::FETCH_ASSOC);
    }
}

перевіряв, "2020-07-16" і "2020-07-17" там знаходиться

7

Re: PDO не виконується запит на вибірку

Перевірте ще пост вище

8

Re: PDO не виконується запит на вибірку

VTrim написав:

І ще синтаксис CONCAT(:_startDate, " 00:00") підозріло виглядає, ймовірно повинно бути CONCAT(":_startDate", " 00:00")
Бо ви вставляєте назву як аргумент - назву поля, а треба як рядок.

Перевірив, на жаль, не допомогло