2011-03-15 67 views
1

我创建了一个脚本来在mssql数据库上执行一些选择查询,但脚本似乎在某些查询中停止了,而没有返回任何错误。浏览器收到来自服务器的完全空的响应。在Firefox上,它会提示下载一个空白的.php文件;在Chrome上返回“错误324(net :: ERR_EMPTY_RESPONSE):未知错误。”;并在IE8上返回“页面无法显示”。php脚本在一些有效的mssql查询中停止了

查询是

$sql = "SELECT * 
    FROM EmployeeHours 
    WHERE (EmployeeId = '".$staff_id."') 
    AND (TimeIn > DATEADD(second, ".$week_start.", CONVERT(DATETIME, '1970-01-01', 102))) 
    AND (TimeOut < DATEADD(second, ".$week_end.", CONVERT(DATETIME, '1970-01-01', 102)) 
     OR TimeOut IS NULL) 
    ORDER BY UTCDateAdded DESC"; 
$query = mssql_query($sql); 

$ staff_id是一个简单的int类型。 $ week_start和$ week_end是unix时间戳。

我不认为这是查询本身,因为它在MSSQL Server Management Studio中运行正常,并返回正确的数据。我也可以将查询简化为“SELECT TOP 1 * FROM EmployeeHours”,没有WHERE条件,并且仍然失败。

将error_reporting设置为E_ALL不起作用。它不会执行任何超过mssql_query()的东西。在查询没有出现在结果文件中之前打印或回显的任何东西。

我可以验证它连接到正确的数据库,因为我可以在同一个数据库中的表上运行一些其他查询并通过脚本获取结果。

+2

每当你用非转义的'$ variable's创建sql时,神会杀死一只小猫。 – cHao 2011-03-15 18:07:12

+0

@cHao它们在我发布的脚本位之前被转义。 – Samutz 2011-03-15 18:11:05

+0

使用MSSQL扩展并不是一个好主意,它从PHP 5.3开始不可用,您可以使用官方Microsoft驱动程序[SQLSRV](http://sqlsrvphp.codeplex.com/)(这里您有[API文档] (http://msdn.microsoft.com/en-us/library/cc296152%28v=sql.90%29.aspx)),这是功能丰富得多,但有一些奇怪的问题,像大多数微软的API。 – Terseus 2011-03-15 18:36:46

回答

1

尝试切换到ODBC扩展而不是MSSQL ext,并且在使用带有odbc_exec()的select查询时它会挂起。没有找到解决办法。

终于通过切换到PDO来实现它的工作。

0

问题是日期类型的结果,使用日期数据类型转换。 例子: SELECT my_day,other_field FROM MY_TABLE 使用 选择Convert(VARCHAR(19),my_day,120)作为my_day,other_field FROM MY_TABLE

使用格式的偏好

0

在我的情况,我检索float,varchar(2),两个long和一个使用PDO(dblib)的“money”。造成这种情况的货币价值是负面的 - 信贷。我最终将货币字段更改为float,并且查询将在没有ERR_EMPTY_RESPONSE的情况下执行。希望这会缩短别人在这个问题上花费的时间!