Как связать параметр INTERVAL с PDO? - PullRequest
0 голосов
/ 10 января 2019

У меня есть запрос, который я пытаюсь настроить полностью из связанных параметров, но сейчас мне приходится прибегать к добавлению строки из параметра GET (я действительно не хочу этого делать).

Вот мое решение прямо сейчас:

$interval = !empty($_REQUEST['interval']) ? $_REQUEST['interval'] : '28 DAY';
$interval = str_replace('_', ' ', $interval);

$data = array(
    ':msisdn' => $_REQUEST['msisdn']
);

$sql = <<<SQL
SELECT
    COUNT(*) AS `countup`
FROM
    (
        SELECT
            utc.`id_user`
        FROM
            `user_to_cli` utc
        WHERE
            1=1
            AND utc.`cli` = :msisdn
            AND utc.`dts_start` > CURDATE() - INTERVAL $interval
    ) a
;
SQL;

Это работает нормально, но когда я пытаюсь изменить интервал на связанный параметр, например, так:

$interval = !empty($_REQUEST['interval']) ? $_REQUEST['interval'] : '28 DAY';
$interval = str_replace('_', ' ', $interval);

$data = array(
    ':msisdn' => $_REQUEST['msisdn'],
    ':interval' => $interval
);

$sql = <<<SQL
SELECT
    COUNT(*) AS `countup`
FROM
    (
        SELECT
            *
        FROM
            `user_to_cli` utc
        WHERE
            1=1
            AND utc.`cli` = :msisdn
            AND utc.`dts_start` > CURDATE() - INTERVAL :interval
    ) a
;
SQL;

Я получаю следующую ошибку:

Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ') a'

1 Ответ

0 голосов
/ 10 января 2019

Ваш код пытается использовать переменную связывания для замены ключевого слова SQL, а также числа. Вы не можете этого сделать и торгуйте;.

Когда я решил эту проблему, я перевел свои временные интервалы в секунды, затем использовал

 CURDATE() - INTERVAL :seconds SECONDS

Кстати, CURDATE () дает вам сегодня полночь. Вместо этого вы можете захотеть СЕЙЧАС (), если вы обрабатываете дневные интервалы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...