Поиск…


замечания

Драйвер SQLSRV является поддерживаемым Microsoft расширением PHP, которое позволяет вам обращаться к базам данных Microsoft SQL Server и SQL Azure. Это альтернатива для драйверов MSSQL, которые устарели от PHP 5.3 и были удалены с PHP 7.


Расширение SQLSRV можно использовать в следующих операционных системах:

  • Windows Vista с пакетом обновления 2 или более поздней версии
  • Windows Server 2008 с пакетом обновления 2 или более поздней версии
  • Windows Server 2008 R2
  • Windows 7

Для расширения SQLSRV требуется, чтобы собственный клиент Microsoft SQL Server 2012 был установлен на том же компьютере, на котором запущен PHP. Если основной клиент Microsoft SQL Server 2012 еще не установлен, щелкните соответствующую ссылку на странице документации «Требования» .


Чтобы загрузить последние версии драйверов SQLSRV, перейдите по ссылке: Загрузить

Полный список системных требований для драйверов SQLSRV можно найти здесь: Системные требования

Те, кто использует SQLSRV 3.1+, должны загрузить драйвер Microsoft ODBC Driver 11 для SQL Server

Пользователи PHP7 могут загрузить последние версии драйверов от GitHub

Драйвер Microsoft® ODBC 13 для SQL Server поддерживает Microsoft SQL Server 2008, SQL Server 2008 R2, SQL Server 2012, SQL Server 2014, SQL Server 2016 (Preview), платформу Google Analytics, базу данных Azure SQL и хранилище данных Azure SQL.

Создание соединения

$dbServer = "localhost,1234"; //Name of the server/instance, including optional port number (default is 1433)
$dbName = "db001"; //Name of the database
$dbUser = "user"; //Name of the user
$dbPassword = "password"; //DB Password of that user

$connectionInfo = array(
    "Database" => $dbName, 
    "UID" => $dbUser,
    "PWD" => $dbPassword
);

$conn = sqlsrv_connect($dbServer, $connectionInfo);

В SQLSRV также есть драйвер PDO. Для подключения с использованием PDO:

$conn = new PDO("sqlsrv:Server=localhost,1234;Database=db001", $dbUser, $dbPassword);

Создание простого запроса

//Create Connection
$conn = sqlsrv_connect($dbServer, $connectionInfo);

$query = "SELECT * FROM [table]"; 
$stmt = sqlsrv_query($conn, $query);

Примечание: использование квадратных скобок [] заключается в выходе из table слов, поскольку это зарезервированное слово . Они работают так же, как backticks ` делают в MySQL .

Вызов хранимой процедуры

Чтобы вызвать хранимую процедуру на сервере:

$query = "{call [dbo].[myStoredProcedure](?,?,?)}"; //Parameters '?' includes OUT parameters

$params = array(
    array($name, SQLSRV_PARAM_IN),
    array($age, SQLSRV_PARAM_IN),
    array($count, SQLSRV_PARAM_OUT, SQLSRV_PHPTYPE_INT) //$count must already be initialised
);

$result = sqlsrv_query($conn, $query, $params);

Создание параметризованного запроса

$conn = sqlsrv_connect($dbServer, $connectionInfo);

$query = "SELECT * FROM [users] WHERE [name] = ? AND [password] = ?";
$params = array("joebloggs", "pa55w0rd");

$stmt = sqlsrv_query($conn, $query, $params);

Если вы планируете использовать один и тот же запрос более одного раза, с разными параметрами, то же самое можно достичь с помощью sqlsrv_prepare() и sqlsrv_execute() , как показано ниже:

$cart = array(
    "apple" => 3,
    "banana" => 1,
    "chocolate" => 2
);

$query = "INSERT INTO [order_items]([item], [quantity]) VALUES(?,?)";
$params = array(&$item, &$qty); //Variables as parameters must be passed by reference

$stmt = sqlsrv_prepare($conn, $query, $params);

foreach($cart as $item => $qty){
    if(sqlsrv_execute($stmt) === FALSE) {
        die(print_r(sqlsrv_errors(), true));
    }
}

Получение результатов запроса

Существует 3 основных способа получения результатов запроса:

sqlsrv_fetch_array ()

sqlsrv_fetch_array() извлекает следующую строку в виде массива.

$stmt = sqlsrv_query($conn, $query);

while($row = sqlsrv_fetch_array($stmt)) {
    echo $row[0];
    $var = $row["name"];
    //...
}

sqlsrv_fetch_array() имеет необязательный второй параметр для извлечения различных типов массивов: SQLSRV_FETCH_ASSOC , SQLSRV_FETCH_NUMERIC и SQLSRV_FETCH_BOTH (по умолчанию) ; каждый возвращает соответственно ассоциативные, числовые или ассоциативные и числовые массивы.


sqlsrv_fetch_object ()

sqlsrv_fetch_object() извлекает следующую строку в качестве объекта.

$stmt = sqlsrv_query($conn, $query);

while($obj = sqlsrv_fetch_object($stmt)) {
    echo $obj->field; // Object property names are the names of the fields from the query
    //...
}

sqlsrv_fetch ()

sqlsrv_fetch() делает следующую строку доступной для чтения.

$stmt = sqlsrv_query($conn, $query);

while(sqlsrv_fetch($stmt) === true) {
    $foo = sqlsrv_get_field($stmt, 0); //gets the first field -
}

Получение сообщений об ошибках

Когда запрос идет не так, важно получить сообщение об ошибке, которое возвращается драйвером, чтобы определить причину проблемы. Синтаксис:

sqlsrv_errors([int $errorsOrWarnings]);

Это возвращает массив с:

ключ Описание
SQLSTATE Состояние, в котором находится драйвер SQL Server / OBDC.
код Код ошибки SQL Server
сообщение Описание ошибки

Обычно используется вышеуказанная функция:

$brokenQuery = "SELECT BadColumnName FROM Table_1";
$stmt = sqlsrv_query($conn, $brokenQuery);

if ($stmt === false) {
    if (($errors = sqlsrv_errors()) != null) {
        foreach ($errors as $error) {
            echo "SQLSTATE: ".$error['SQLSTATE']."<br />";
            echo "code: ".$error['code']."<br />";
            echo "message: ".$error['message']."<br />";
        }
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow