Статьи

Выпущена версия 3.0 (бета) драйверов SQL Server для PHP!

Community Technology Preview (бета — версия) из v3.0 из драйверов SQL Server для PHP был выпущен сегодня (см объявление о блоге команды ). Вы можете скачать его здесь: Загрузите v3.0 драйверов SQL Server для PHP . В этом выпуске появилось три новых функции: буферизованные запросы , поддержка LocalDB и поддержка высокой доступности и аварийного восстановления . Важно отметить, что последние две функции зависят от следующей версии SQL Server (с кодовым названием «Denali»). Предварительный просмотр Denali можно скачать бесплатно здесь (см. Примечания в этой статье о процессе установки): Загрузить SQL Server Denali CTP 3, Подробнее о каждой новой функции в разделах ниже. Мы надеемся получить от вас обратную связь. Если у вас есть отзывы, пожалуйста, прокомментируйте этот пост или свяжитесь со мной ( @brian_swan ) и / или Джонатаном Герин ( @ kop48 , менеджер программ для водителей) в Twitter.

Буферизованные запросы

Возможно, более описательное имя для «буферизованных запросов» будет «буферизованными наборами результатов». С помощью этой функции вы можете выполнить запрос и перенести весь набор результатов в память. Это позволяет легко получить количество строк и перемещаться вперед и назад по строкам. До этой функции, чтобы включить прокрутку набора результатов, вам нужно было использовать прокручиваемый курсор . Использование прокручиваемого курсора по-прежнему является наилучшим вариантом, если вы работаете с большими наборами результатов, но если у вас есть наборы результатов малого и среднего размера, опция буферизованных запросов может повысить производительность ваших приложений.

SQLSRV

Чтобы перенести весь набор результатов в память с драйвером SQLSRV, передайте массив опций в sqlsrv_query или sqlsrv_prepare со следующей парой ключ => значение: «Scrollable» => «buffered» . Затем при получении строк вы можете вызвать sqlsrv_num_rows, чтобы получить количество строк, и вы можете использовать параметры прокрутки с sqlsrv_fetch , sqlsrv_fetch_array или sqlsrv_fetch_object :

    $serverName = '.\sqlexpress';
    $connectionInfo = array("UID"=>"username", "PWD"=>"password", "Database"=>"ExampleDB");
    $conn = sqlsrv_connect( $serverName, $connectionInfo);
     
    $sql = "SELECT * FROM CUSTOMERS";
    $stmt = sqlsrv_query($conn, $sql, null, array("Scrollable"=>"buffered"));
    echo "Row count: " . sqlsrv_num_rows($stmt) . "<br />";
     
    $row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC, SQLSRV_SCROLL_ABSOLUTE, 10);
    print_r($row);

Для получения дополнительной информации см. Типы курсоров (драйвер SQLSRV) в документации (включена в загрузку).

PDO_SQLSRV

Чтобы перенести весь набор результатов в память с драйвером PDO_SQLSRV, задайте параметры курсора в методе PDO :: prepare, как показано ниже. Затем для извлечения данных используйте параметры выборки в методе PDOStatement :: fetch :

    $serverName = '.\sqlexpress';
    $conn = new PDO( "sqlsrv:server=$serverName ; Database = ExampleDB", "", "");
     
    $sql = "SELECT * FROM CUSTOMERS";
     
    $stmt = $conn->prepare( $sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED));
    $stmt->execute();
    echo "Row count: " . $stmt->rowCount() . "<br />";
     
    $row = $stmt->fetch( PDO::FETCH_ASSOC, PDO::FETCH_ORI_ABS, 1 );
    print_r($row);

Для получения дополнительной информации см. Типы курсора (драйвер PDO_SQLSRV) в документации.

Обратите внимание, что размер буфера по умолчанию установлен на 10240 КБ (т.е. 10 МБ). Вы можете изменить это значение, используя  функцию sqlsrv_configure или отредактировав файл php.ini (имя параметра ClientBufferMaxKBSize ).

LocalDB

LocalDB — это «серверная» база данных (доступная в SQL Server «Denali»), разработанная специально для разработчиков. Он прост в установке и не требует управления, предлагая тот же язык T-SQL, поверхность программирования и поставщиков на стороне клиента, что и обычный SQL Server Express. (Для получения дополнительной информации см. Этот пост в блоге: Введение в LocalDB, улучшенный SQL Express .) По сути, LocalDB позволяет подключаться напрямую к файлу базы данных SQL Server ( файл .mdf ).

После установки LocalDB (см. Примечания по установке SQL Server «Denali» ниже) вы можете подключиться к файлу базы данных, используя «(localdb) \ v11.0» в качестве имени сервера и указав путь к файлу .mdf. в ваших вариантах подключения:

SQLSRV
    $serverName = '(localdb)\v11.0';
    $connectionInfo = array( "Database"=>"ExampleDB", "AttachDBFileName"=>'c:\Temp\ExampleDB.mdf');
    $conn = sqlsrv_connect( $serverName, $connectionInfo);

Для получения дополнительной информации см. Драйвер SQL Server для PHP Поддержка LocalDB в документации.

PDO_SQLSRV
    $serverName = '(localdb)\v11.0';

    $conn = new PDO( 'sqlsrv:server=(localdb)\v11.0; Database=TestDB; AttachDBFileName=c:\Temp\TestDB.mdf', NULL, NULL);

Для получения дополнительной информации см. Драйвер SQL Server для PHP Поддержка LocalDB в документации.

Имейте в виду , что LocalDB еще бета особенность SQL Server «Denali» (то есть обратная связь приветствуется!) Вот один «Гоча» что я столкнулся при использовании LocalDB с драйвером SQLSRV: LocalDB поддерживает только встроенную проверку подлинности Windows. Если вы Присмотревшись к фрагментам кода выше, вы заметите, что для подключения не указано имя пользователя или пароль. Драйвер SQLSRV пытается подключиться с использованием аутентификации Windows, если не указаны имя пользователя и пароль. Мне было легко запустить PHP из командной строки, чтобы подключиться к LocalDB (командная строка запускается под моим именем). Однако при запуске PHP в качестве модуля FastCGI в IIS разрешения не так просты. Вам необходимо настроить IIS для использования проверки подлинности Windows (дополнительную информацию см. в этой статье:Драйвер SQLServer для PHP: понимание аутентификации Windows .

Высокая доступность и аварийное восстановление

Функции высокой доступности и аварийного восстановления SQL Server (в совокупности называемые SQL Server Always On) обеспечивают практически нулевое время простоя и позволяют оптимизировать использование оборудования. Дополнительные сведения о SQL Server Always On см. В разделе Always On — Новое в коде SQL Server с именем «Denali» CTP 3 . Чтобы понять, как использовать эти функции с помощью драйверов SQL Server для PHP, см. Документ «Поддержка драйверов SQL Server для PHP для обеспечения высокой доступности и аварийного восстановления» в документации.

Замечания по установке SQL Server «Denali»

Вы можете скачать SQL Server «Denali» CTP 3 здесь . Я просто хочу указать на две вещи, чтобы ваша установка прошла гладко:

1. При выборе издания обязательно выберите Экспресс. Эта опция установит LocalDB.

образ

2. При выборе функций для установки обязательно включите LocalDB.

образ

Как я уже говорил во введении, мы хотели бы получить ваши отзывы … поэтому, пожалуйста, дайте нам знать, что вы думаете!