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

Sql server SQL Server DATEADD函数不能与PDO Sqlsrv扩展一起使用,sql-server,pdo,sqlsrv,dateadd,Sql Server,Pdo,Sqlsrv,Dateadd,我正在使用带有Sqlsrv扩展名的PDO连接到SQL Server数据库。当我在任何SQLServer数据库客户机中运行此查询时,它都可以正常工作,但在PHP源代码中它不会生成结果 SELECT session FROM t_php_session WHERE php_session_id = 'p64aqbh15u6t35tq2h8n0bluq0' AND user_ip = '127000000001' AND DATEADD(MINUTE, 30, created) >

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

SELECT session 
FROM t_php_session 
WHERE php_session_id = 'p64aqbh15u6t35tq2h8n0bluq0' 
  AND user_ip = '127000000001' 
  AND DATEADD(MINUTE, 30, created) >= GETDATE()
在调试期间,我观察到当我从
WHERE
子句中删除
DATEADD
条件时,它工作正常并返回结果。但我不确定这种情况有什么问题

以下是我的示例源代码:

$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);

另一个答案显然破坏了事先准备好的陈述的整个想法。

如果您使用
PDO::PARAM_INT
绑定一个数字,那么您的代码应该可以正常工作

至少在
仿真模式下
这会起作用。

我认为你不能参数化
日期添加的
间隔
部分。谢谢@wewesthemenace!!!你救了我一天。您可能希望添加此注释作为答案,我想对其进行更新:)您的sql server版本是什么?DATEADD参数可能不是问题。我知道,但这也是DATEADD函数的第一个参数,您希望在其中转换datetime字段。就我而言,我已经过了30分钟的休息时间。不管怎样,这对我来说是有效的。非常感谢!!为了获得更好的性能,您应该始终对值使用函数,而不是列:“created>=dateadd(minute,-30,GETDATE())”而不是“dateadd(minute,30,created)>=GETDATE()”我们可以在execute语句中传递数组并使用bindParam吗?是否可以提供您认为在我的示例中应该使用的相同代码
$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();