2015-07-15 8 views
0

Я использую 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 структура таблицы базы данных сервера:

enter image description here

Я также попытался присвоения значений с помощью 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(); 
+0

Я не думаю, что вы можете параметризовать 'INTERVAL' часть' DATEADD'. –

+1

Спасибо @wewesthemenace !!! Ты спас свой день. Вы можете добавить этот комментарий в качестве ответа, и я бы хотел его увеличить :) – neeraj

+0

Какова версия вашего SQL-сервера? Параметр DATEADD может и не быть проблемой. – Mihai

ответ

2

Другой ответ, очевидно, делает вся идея подготовленных заявлений испорчен.

Ваш код должен положительно работать, если вы связываете число с помощью PDO::PARAM_INT.
По крайней мере, в emulation mode это сработает.

+0

Можно ли передать массив в инструкции выполнения вместе с помощью bindParam? – neeraj

+0

Возможно ли предоставить тот же код, который, по вашему мнению, должен работать в моем примере – neeraj

+0

Много спасибо, он сработал !!! – neeraj

 Смежные вопросы

  • Нет связанных вопросов^_^