nmc*_*nmc 16 php sql-server pdo driver
在SQLSRV驱动程序与PDO驱动程序之间进行选择时,我应该考虑哪些因素(对于带有MS SQL服务器的PHP)?
我看到了之前的Stackoverflow帖子(在Windows上使用PHP时,更好的是(1)SQL Server的本机驱动程序还是(2)PDO驱动程序?)但答案似乎有点缺乏,并没有提到所有的好处使用本文中提到的SQLSRV驱动程序.
我正在寻找一个全面的和最新的(例如,SQLSRV驱动程序是否仅适用于Windows?),程序员可以将其称为资源.
Rob*_*oun 16
SQLSRV和PDO_SQLSRV是Microsoft提供的两个当前生成的PHP驱动程序,但它们都使用相同的代码: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;
Run Code Online (Sandbox Code Playgroud)
然后来自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"
}
}
Run Code Online (Sandbox Code Playgroud)
而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"
}
}
Run Code Online (Sandbox Code Playgroud)
它让我很疯狂PDO_SQLSRV将我的所有数据都转换为字符串,无论我是否想要它,所以我使用了SQLSRV.(我必须承认我设置ReturnDatesAsStrings=true因为我懒得处理日期类.)
我也喜欢语法更好,但那只是我.
SDC*_*SDC 11
PDO允许您将代码编写为合理的数据库中立.
如果你想要真正的数据库中立,你想要使用像NotORM这样的完整数据库抽象层- 使用普通的PDO,你仍然需要注意SQL语法差异,但至少你的基本PHP代码是数据库-中性.
数据库中立可能看起来并不重要 - 如果你使用的是SQL Server,那么你可能已经被告知这是必需的而不是其他的 - 但是你无法预测将来会发生什么变化,所以如果选择是在DB中立驱动程序和特定于DB的驱动程序之间,并且您没有任何其他原因需要优先选择,那么请使用中性驱动程序....如果您的生活更轻松公司被接管,新老板想要使用Oracle作为数据库!
此外,由于它是数据库中立的,因此PDO在PHP社区中更为标准且更为人所知.你可以从在线网站(比如这个网站)获得更多的PDO帮助,而不是MSSQL驱动程序.