2012-07-23 96 views
10

在SQLSRV驅動程序與PDO驅動程序(適用於MS SQL Server的PHP)之間進行選擇時應考慮哪些因素?SQLSRV驅動程序與使用MS SQL Server的PHP的PDO驅動程序

我看到了此前的Stackoverflow帖子(When using PHP on Windows, what is better (1) the native driver for SQL Server or (2) the PDO driver?),但答案似乎有點缺乏,並沒有提到使用this article中提到的SQLSRV驅動程序的所有好處。

我正在尋找一個全面的,最新的(例如,它仍然是SQLSRV驅動程序只適用於Windows?)答案,程序員可以稱爲資源。

回答

7

PDO允許你寫你的代碼是合理的DB中立。

如果你想真正的DB中立,你會想要使用一個完整的數據庫抽象層,如NotORM - 與普通的PDO,你仍然需要注意SQL語法的差異,但至少你的基本PHP代碼將是DB中立的。

現在數據庫中性可能看起來並不重要 - 如果您使用的是SQL Server,那麼您可能已被告知這是必需的,沒有其他 - 但是您無法預測事情將如何改變未來,所以如果選擇是在數據庫中立的驅動程序和數據庫特定的驅動程序之間進行的,並且您沒有任何其他的偏好理由,那麼使用中性的驅動程序......它會使生活如果你的公司被接管並且新老闆想要使用Oracle作爲數據庫,那麼容易很多!

另外,因爲它是數據庫中立的,所以PDO在PHP社區中更加標準和更爲知名。你會從網站上獲得更多的PDO幫助(比如這個),而不是MSSQL驅動。

10

SQLSRV和PDO_SQLSRV是兩個current-generation php drivers available from Microsoft,但都使用下面的代碼:SQL Server Native Client 11.(這就是爲什麼沒有Mac或Linux版本的PHP驅動程序:它們只是包裝。)兩個性能司機應該是相似的;這只是你喜歡哪個API的問題。

在大多數情況下,由於跨平臺的考慮,會使用PDO_SQLSRV驅動程序。但是,在查看這兩個驅動程序之後,我使用SQLSRV驅動程序來查看這兩個驅動程序,因爲它將數據作爲底層SQL Server數據類型的映射返回,而PDO_SQLSRV將所有內容作爲字符串返回。

所以,如果你的SQL是:

SELECT 1234 as integer, Cast(123.456 as float) as float, 
     getdate() as date, '1234' as string1,'123.456' as string2; 

然後從PDO_SQLSRV該行的var_dump給出:

array(1) { 
    [0] => 
    array(5) { 
     'integer' => 
     string(4) "1234" 
     'float' => 
     string(7) "123.456" 
     'date' => 
     string(23) "2012-12-06 22:35:05.373" 
     'string1' => 
     string(4) "1234" 
     'string2' => 
     string(7) "123.456" 
    } 
    } 

而SQLSRV驅動程序提供了:

array(1) { 
    [0] => 
    array(5) { 
     'integer' => 
     int(1234) 
     'float' => 
     double(123.456) 
     'date' => 
     class DateTime#1 (3) { 
     ... 
     } 
     'string1' => 
     string(4) "1234" 
     'string2' => 
     string(7) "123.456" 
    } 
    } 

它驅使我堅果PDO_SQLSRV將我的所有數據都轉換爲字符串,無論我是否願意,因此我使用了SQLSRV。 (我不得不承認我設置了ReturnDatesAsStrings=true,因爲我懶得處理日期類。)

我也喜歡語法稍微好點,但那只是我。

4

微軟終於提供了一些資源來定製他們的原生驅動程序,以便與PHP良好協作。我目前正在對Apa​​che 2.4 64位進行beta測試。

Beta PHP 7 SQL_SRV 64Bit Driver

相關問題