2012-12-21 78 views
0

我有一個公共表表達式,它在mssql編輯器上工作正常。但是,當我在PHP中使用相同的填充字符串變量並使用odbc_exec($dbhandle,$query)時,它不返回任何行。沒有錯誤被拋出。這是PHP的限制嗎?其他各種表格上的其他選擇查詢運行良好。問題僅限於CTE聲明。使用公用表表達式查詢

+1

您能否顯示導致問題的語句? – DaveRandom

+2

從SSMS運行SQL Profiler工具來攔截正在到達服務器的SQL查詢。然後觸發您的PHP客戶端發送包含CTE的查詢的請求。進行此檢查以確保包含CTE的查詢進入服務器(並且不會被'odbc_exec'過濾掉)。 –

回答

1

我知道這是一個老問題,但沒有得到回答,這是一個高排名谷歌的結果,所以我想我會在湊錢。

無的查詢的MS SQL服務器的本地PHP方法可以支持Common Table Expressions('WITH'從句)。這些包括mssql_ *庫和odbc_ *庫。

這是由於MS SQL處理CTE的方式(通過創建宏執行)。好消息是微軟的圖書館(sqlsrv_ *)DO本身就支持CTE。

sqlsrv_ *庫在創建和使用連接,簡單查詢,預處理語句等方面與mssql_ *的運行方式相同。它們幾乎是MSSQL服務器使用mssql_ *或odbc_ *的「插入式」替代方案,並且啓動速度明顯更快。

您可以從this link獲取sqlsrv庫。在撰寫本文時,2.x適用於SQL 2008,但SQL 2012需要3.x。