SQL Server DATEADD函数不能与PDO Sqlsrv扩展一起使用

时间:2015-07-15 07:13:09

标签: sql-server pdo sqlsrv dateadd

我正在使用带Sqlsrv扩展名的PDO连接到SQL Server数据库。当我在任何SQL Server数据库客户端中运行它时,此查询工作正常,但在PHP源代码中,它不会产生结果。

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 Server数据库表结构:

enter image description here

我还尝试使用 bindParam 方法分配值,而不是在执行语句中传递数组,但这也无法正常工作。

从@Your Common Sense获得解决方案后,我做了以下更改并且有效。

$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 个答案:

没有答案