Драйвер SQLSRV и драйвер PDO для PHP с MS SQL Server
Какие соображения следует принимать во внимание при выборе между драйвером SQLSRV и драйвером PDO (для PHP с сервером MS SQL)?
Я видел этот предыдущий пост Stackoverflow (При использовании PHP в Windows, что лучше (1) собственный драйвер для SQL Server или (2) драйвер PDO?), но ответ кажется немного недостающим и не упоминает все преимущества использования драйвера SQLSRV, как указано в этой статье.
Я ищу всеобъемлющий и актуальный (например, все-таки, что драйвер SQLSRV доступен только для Windows?) ответьте, что программисты могут ссылаться как ресурс.
Ответы
Ответ 1
PDO позволяет вам писать код, чтобы быть разумно нейтральным DB.
Если вы хотите по-настоящему нейтрализовать DB, вы бы хотели использовать полный абстракционный уровень DB, например NotORM - с простым PDO, вам все равно нужно быть осторожным с различием синтаксиса SQL, но, по крайней мере, ваш базовый PHP-код будет DB-нейтральным.
Будучи DB-нейтральным, может показаться неважным сейчас - если вы используете SQL Server, то вам, вероятно, сказали, что требуется, и ничего больше, - но вы не можете предсказать, как все изменится в будущее, поэтому, если выбор между драйвером с нейтральной базой данных и драйвером, специфичным для БД, и у вас нет других причин для предпочтения, тогда идите с нейтральным... это сильно изменит жизнь проще, если ваша компания будет захвачена, и новый босс хочет использовать Oracle в качестве базы данных!
Кроме того, поскольку он нейтрален DB, PDO является более стандартным и более известным в сообществе PHP. Вы получите дополнительную помощь с PDO с сайтов в Интернете (например, этот), чем с драйвером MSSQL.
Ответ 2
SQLSRV и PDO_SQLSRV являются двумя текущими версиями php-драйверов, доступными из Microsoft, но оба используют один и тот же код под ним: собственный клиент SQL Server 11 (Вот почему нет версии драйверов php для Mac или Linux: они просто обертки). Производительность двух драйверов должна быть одинаковой; это просто вопрос, какой 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;
Затем var_dump строки из PDO_SQLSRV дает:
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
, потому что мне было слишком ленив, чтобы иметь дело с классом даты.)
Мне также нравится синтаксис немного лучше, но это только я.
Ответ 3
Microsoft наконец-то выделила некоторые ресурсы для адаптации своего родного драйвера, чтобы хорошо работать с PHP. В настоящее время я тестирую бета-тестирование на Apache 2.4 64 Bit.
Бета-версия PHP 7 Драйвер SQL_SRV 64Bit