Php Datediff函数()给了我错误的答案

Php Datediff函数()给了我错误的答案,php,sql-server,Php,Sql Server,我使用selectdatediffdd、$StartDate、$Today来计算两个日期之间的天数$$起始日期为2020-11-19,$Today是当前日期$Today=dateY-m-d;。我得到28天的天数,这是不正确的。我做错了什么?要回答为什么值是错的这个实际问题,是因为它不是错的;28对于您传递的值是正确的。问题是你没有参数化。DATEDIFF实际上工作完全正确。您正在执行的操作如下: 选择DATEDIFFDD,2020-11-19,2021-02-01; 返回28。这是正确的。您拥有

我使用selectdatediffdd、$StartDate、$Today来计算两个日期之间的天数$$起始日期为2020-11-19,$Today是当前日期$Today=dateY-m-d;。我得到28天的天数,这是不正确的。我做错了什么?

要回答为什么值是错的这个实际问题,是因为它不是错的;28对于您传递的值是正确的。问题是你没有参数化。DATEDIFF实际上工作完全正确。您正在执行的操作如下:

选择DATEDIFFDD,2020-11-19,2021-02-01; 返回28。这是正确的。您拥有的也是以下表达式的同义词:

SELECT DATEDIFF(DD,1990,2018);
SELECT DATEDIFF(DD,'19050614','19070712');
--and even
SELECT 2018 - 1990;
因为没有正确地参数化和注入,所以传递的值不是日期时间值,而是int的表达式。参数化您的查询,并传递一个日期和时间日期类型值,SQL就可以正常工作。例如:

-这不会出现在您的SQL中,但是当从应用程序传递参数时,会出现一些等价的情况 声明@StartDate date='20201119', @今日日期='20210201'; -和DATEDIFF函数 选择DATEDIFFDAY、@StartDate、@Today;
这还返回表达式的正确值,但也返回您可能期望的值74。

要回答为什么值错误的实际问题,是因为它不是;28对于您传递的值是正确的。问题是你没有参数化。DATEDIFF实际上工作完全正确。您正在执行的操作如下:

选择DATEDIFFDD,2020-11-19,2021-02-01; 返回28。这是正确的。您拥有的也是以下表达式的同义词:

SELECT DATEDIFF(DD,1990,2018);
SELECT DATEDIFF(DD,'19050614','19070712');
--and even
SELECT 2018 - 1990;
因为没有正确地参数化和注入,所以传递的值不是日期时间值,而是int的表达式。参数化您的查询,并传递一个日期和时间日期类型值,SQL就可以正常工作。例如:

-这不会出现在您的SQL中,但是当从应用程序传递参数时,会出现一些等价的情况 声明@StartDate date='20201119', @今日日期='20210201'; -和DATEDIFF函数 选择DATEDIFFDAY、@StartDate、@Today;
这还返回表达式的正确值,但也返回您可能期望的值74。

是否需要sql server?或者谢谢。3v4l.org/GvA5c有效您需要sql server吗?或者谢谢。3v4l.org/GvA5c