Я использую PDO с расширением Sqlsrv
для подключения к базе данных SQL Server. Этот запрос отлично работает, когда я запускаю его в любом клиенте базы данных SQL Server, но в исходном коде PHP он не дает результата.Функция SQL DATEADD, не работающая с расширением PDO Sqlsrv
SELECT session
FROM t_php_session
WHERE php_session_id = 'p64aqbh15u6t35tq2h8n0bluq0'
AND user_ip = '127000000001'
AND DATEADD(MINUTE, 30, created) >= GETDATE()
При отладке я заметил, что когда я удалить условие DATEADD
из пункта WHERE
, то он отлично работает и возвращает результат. Но я не уверен, что не так с этим условием.
Вот мой исходный пример кода:
$session_id = 'p64aqbh15u6t35tq2h8n0bluq0';
$interval = 30;
$ip = '127000000001';
$query = "SELECT session FROM t_php_session WHERE php_session_id = ? AND user_ip = ? AND DATEADD(MINUTE, ?, created) >= GETDATE()";
$stmt = $conn->prepare($query);
$stmt->execute(array($session_id, $ip, $interval));
$result = $stmt->fetchAll();
echo "<pre>";
print_r($result);
Это моя SQL структура таблицы базы данных сервера:
Я также попытался присвоения значений с помощью bindParam метод вместо прохождения массив в выполнить оператор, но это тоже не сработало.
РЕШЕНИЕ
После получения решения от здравого смысла @ your я сделал следующие изменения, и она работала.
$query = "SELECT session FROM t_php_session WHERE php_session_id = ? AND user_ip = ? AND DATEADD(MINUTE, ?, created) >= GETDATE()";
$stmt = $conn->prepare($query);
$stmt->bindParam(1, $session_id, PDO::PARAM_STR);
$stmt->bindParam(3, $interval, PDO::PARAM_INT);
$stmt->bindParam(2, $ip, PDO::PARAM_STR);
$stmt->execute();
$result = $stmt->fetchAll();
Я не думаю, что вы можете параметризовать 'INTERVAL' часть' DATEADD'. –
Спасибо @wewesthemenace !!! Ты спас свой день. Вы можете добавить этот комментарий в качестве ответа, и я бы хотел его увеличить :) – neeraj
Какова версия вашего SQL-сервера? Параметр DATEADD может и не быть проблемой. – Mihai