Драйвер 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