2011-03-15 68 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的情況下執行。希望這會縮短別人在這個問題上花費的時間!