Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php odbc_exec日期时间错误_Php_Sql_Sql Server 2008_Odbc - Fatal编程技术网

Php odbc_exec日期时间错误

Php odbc_exec日期时间错误,php,sql,sql-server-2008,odbc,Php,Sql,Sql Server 2008,Odbc,运行包含日期作为输入的存储过程时出错 我的问题是: $query = "asistencia_virtual '2012-01-01', '2012-12-31'"; 在管理工作室,它工作完美 我只对过时的查询有问题,其他的都很好 警告:odbc_exec():SQL错误:[Microsoft][SQL Server本机客户端10.0][SQL Server]在SQLExecDirect中执行sintaxis al convertir una cadena de caracteres a da

运行包含日期作为输入的存储过程时出错

我的问题是:

$query = "asistencia_virtual '2012-01-01', '2012-12-31'";
在管理工作室,它工作完美

我只对过时的查询有问题,其他的都很好

警告:odbc_exec():SQL错误:[Microsoft][SQL Server本机客户端10.0][SQL Server]
在SQLExecDirect中执行sintaxis al convertir una cadena de caracteres a datetime.,SQL状态22008时出错


当谈到日期时,最好的做法是用书面形式代替月份,这样就不可能把日期和月份混在一起。尝试按以下格式将日期作为字符串输入:

“dd-MMM-yyyy”

$query = "asistencia_virtual '01 Jan 2012', '31 Dec 2012'";
试试这个:


您已经发现,
yyyy-mm-dd
不是一种安全的日期格式。原因如下:

SET LANGUAGE FRENCH;
SELECT MONTH(CONVERT(DATETIME, '2012-01-12')); -- yields 12, not 1
GO
SELECT CONVERT(DATETIME, '2012-12-31');
第一个查询产生
12
而不是
1
,因为它将其解释为
yyyy-dd-mm
。第二个查询生成:

Msg 242,第16级,第3号州,第1行
将日期时间转换为日期时间限制

仅限日期的日期时间字符串文本的唯一安全格式是
yyyymmdd
。下面是代码的外观(添加必需的
EXEC
dbo.
前缀):

有关常见日期/时间查询问题的更多信息:


您使用的是哪个版本的sql server?@JW。SQL Server本机客户端10.0—2008年—它始终有效,在西班牙语中,如果SQL Server设置为spanish,您将使用ene(enero)而不是jan。问题是,在同一个应用程序中,您可以有两个用户,一个使用西班牙语,一个使用英语。你真的想切换到基于语言的硬编码月份名称吗?这就是你使用本地化的目的。sql server将只使用一种语言。您向SQL server传递所需的语言,前端显示本地化的日期。虽然我永远不会怀疑您,但这怎么不合理呢?这不是ISO8601的日期规范吗?这不应该被归类为解析引擎的故障而不是“本地化”问题吗?这是不是…的失败。。。我甚至无法理解。我很高兴你在你的博客文章中包含了连接问题。希望这在不久的将来消失。@jcolebrand这与坚持本地化有关。据称,当有人表示他们的语言是法语时,SQL Server团队(早在那时)认为这一定意味着他们想要
yyyy-dd-mm
。我也不会试图将ISO标准拉得太远,因为大多数客户不知道或不关心-99%的客户使用
mm/dd/yyyy
dd/mm/yyyy
…谢谢{d'2012-12-31'}修复它!
SET LANGUAGE FRENCH;
SELECT MONTH(CONVERT(DATETIME, '2012-01-12')); -- yields 12, not 1
GO
SELECT CONVERT(DATETIME, '2012-12-31');
$query = "EXEC dbo.asistencia_virtual '20120101', '20121231';";