sqlsrv_connect

(无版本信息可用,可能只在 Git 中)

sqlsrv_connect打开到 Microsoft SQL Server 数据库的连接

描述

sqlsrv_connect(string $serverName, array $connectionInfo = ?): resource

打开到 Microsoft SQL Server 数据库的连接。默认情况下,连接尝试使用 Windows 身份验证。要使用 SQL Server 身份验证进行连接,请在连接选项数组中包含 "UID" 和 "PWD"。

参数

serverName

建立连接的服务器名称。要连接到特定实例,请在服务器名称后加上反斜杠和实例名称(例如 serverName\sqlexpress)。

connectionInfo

一个关联数组,指定连接到服务器的选项。如果未指定 UID 和 PWD 键的值,则将尝试使用 Windows 身份验证进行连接。有关支持键的完整列表,请参见 » SQLSRV 连接选项

返回值

一个连接资源。如果无法成功打开连接,则返回 false

示例

示例 #1 使用 Windows 身份验证连接。

<?php
$serverName
= "serverName\\sqlexpress"; //serverName\instanceName

// 由于 $connectionInfo 数组中未指定 UID 和 PWD,
// 因此将尝试使用 Windows 身份验证进行连接。
$connectionInfo = array( "Database"=>"dbName");
$conn = sqlsrv_connect( $serverName, $connectionInfo);

if(
$conn ) {
echo
"连接已建立。<br />";
}else{
echo
"无法建立连接。<br />";
die(
print_r( sqlsrv_errors(), true));
}
?>

示例 #2 通过指定用户名和密码连接。

<?php
$serverName
= "serverName\\sqlexpress"; //serverName\instanceName
$connectionInfo = array( "Database"=>"dbName", "UID"=>"userName", "PWD"=>"password");
$conn = sqlsrv_connect( $serverName, $connectionInfo);

if(
$conn ) {
echo
"连接已建立。<br />";
}else{
echo
"无法建立连接。<br />";
die(
print_r( sqlsrv_errors(), true));
}
?>

示例 #3 在指定端口上连接。

<?php
$serverName
= "serverName\\sqlexpress, 1542"; //serverName\instanceName, portNumber (default is 1433)
$connectionInfo = array( "Database"=>"dbName", "UID"=>"userName", "PWD"=>"password");
$conn = sqlsrv_connect( $serverName, $connectionInfo);

if(
$conn ) {
echo
"连接已建立。<br />";
}else{
echo
"无法建立连接。<br />";
die(
print_r( sqlsrv_errors(), true));
}
?>

注释

默认情况下,sqlsrv_connect() 使用连接池来提高连接性能。要关闭连接池(即在每次调用时强制建立新连接),请在 $connectionOptions 数组中将 "ConnectionPooling" 选项设置为 0(或 false)。有关更多信息,请参见 » SQLSRV 连接池

SQLSRV 扩展没有专门用于更改连接到的数据库的函数。目标数据库在传递给 sqlsrv_connect 的 $connectionOptions 数组中指定。要更改打开连接上的数据库,请执行以下查询 "USE dbName"(例如 sqlsrv_query($conn, "USE dbName"))。

参见

添加注释

用户贡献的注释 5 notes

Eion Robb
8 年前
https://msdn.microsoft.com/en-us/library/cc296193.aspx 中所述,连接将转换某些数据为 PHP 数据类型。与 PHP 中的其他数据库函数的不同之处在于,日期将以对象的形式输出,而不是字符串。

要使 sqlsrv_fetch_{array|object}() 函数以字符串形式返回日期/时间/日期时间,请指定
'ReturnDatesAsStrings' => true
在 $connectionInfo 数组中。

有关此行为的更多信息,请参见 https://msdn.microsoft.com/en-us/library/ee376928.aspx
alvaro at demogracia dot com
7 年前
您可以使用 connectionInfo 参数来指定连接编码,例如

<?php
$connectionInfo
= [
'CharacterSet' => 'UTF-8',
];
$conn = sqlsrv_connect($serverName, $connectionInfo);
?>

但请注意,只有两种选项
- SQLSRV_ENC_CHAR(常量)用于 ANSI,它是默认选项
- 'UTF-8'(字符串)用于 Unicode
mmi at uhb-consulting dot de
5 年前
要防止在 Linux 上出现 [Microsoft][ODBC Driver 17 for SQL Server]String data, right truncation Errors 错误
您必须添加连接参数 'CharacterSet' => "UTF-8"

已使用驱动程序版本 5.3 进行测试
manav at drupal.org/u/manav
6 年前
如果有人想使用
<?php
//..
sqlsrv_connect();
//..
?> 方法连接到 Fedora-25 上的远程 ms-sql 服务器,则用户必须安装 PECL php-sqlsrv 库。
在我的情况下,我遇到了同样的问题,但在搜索后找到了这个解决方案并实施了它......现在它可以正常工作了。
Anonymous
5 年前
在 PHP 中连接 SQL SERVER 2012
<?php
$serverName
= "服务器"; //serverName\instanceName
$connectionInfo = array( "数据库"=>"base", "UID"=>"ex", "PWD"=>"******");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
;

if(
$conn ) {
echo
"连接已建立。<br />";
}else{
echo
"连接无法建立。<br />";
die(
print_r( sqlsrv_errors(), true));
}

$sql = "SELECT name FROM [base].[dbo].[table]";
$params = array();
$options = array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
$stmt = sqlsrv_query( $conn, $sql , $params, $options );

$row_count = sqlsrv_num_rows( $stmt );


if (
$row_count === false)
echo
"获取数据时出错。";
else
echo
"好";
//echo $row_count;

while( $row = sqlsrv_fetch_array( $stmt) ) {
print
json_encode($row);
}

sqlsrv_close($conn);
?>
To Top