2016-07-04 38 views
0

在linux和mac上,我們使用的是dblib(FreeTDS)驅動程序。在Windows上,我們使用Microsofts SQLSRV驅動程序。我們被這樣一個混合的環境困住了一點,它很糟糕,但它就是這樣。'Windows PHP PDO需要nextRowset而'Nix沒有,我該如何解決這個問題?

如果我們有一個將插入到@variable表或#temp表的查詢,那麼使用這些結果來加入其他東西會導致我們遇到的問題。

僞查詢證明:

CREATE TABLE #someTempTable(
    id INT PRIMARY KEY 
) 
INSERT INTO #someTempTable 
SELECT someID FROM someRealTable 
WHERE someColumn = someValue; 


SELECT * FROM #someTempTable 
INNER JOIN someOtherTable 
     ON someOtherTable.id = #someTempTable.id 

DROP #someTempTable 

在Windows上,我們必須調用$陳述書> nextRowset()之前,我們可以得到的結果,否則它是空

在「尼克斯結果可用沒有調用這個。

真正令人討厭的是,PDO沒有辦法獲得Rowsets的數量,甚至看不到在「當前」之後有另一個Rowsets。

回答

-1

如果您需要調用特定於平臺的代碼,在PHP中,你可以檢查PHP_OS常數:

if ('WIN' === strtoupper(substr(PHP_OS, 0, 3))){ 
    // Do Windows-specific stuff here 
}else{ 
    // Do non-Windows stuff here 
} 

PHP_OS常數和其他預先定義的常量可以發現in the documentation

0

如果您的查詢返回多個行集,則必須調用nextRowset()才能訪問下一個行集。沒有例外。

如果在某些環境中您不必調用它,那麼這是一個錯誤,您必須報告它,並提供一個最小的可重現示例。由於SQL的破壞以及PDO代碼的缺失,您的當前草圖不能確認此需求,因爲它不能由任何人運行。

所以,首先從創建一個開始。在這個過程中,你很可能會在自己的代碼中發現一個錯誤,從而解決問題。

相關問題