介绍
在开发中,如果需要连接Microsoft SQL Server数据库,我们可以使用Microsoft提供的PHP扩展程序 sqlsrv 或 pdo_sqlsrv 来完成这个任务。
其中sqlsrv扩展程序以 Microsoft ODBC Driver for SQL Server 作为底层接口,需要安装 Microsoft ODBC Driver for SQL Server 和 SQL Server Native Client ODBC driver 以便正常运行。但是pdo_sqlsrv扩展程序则以 Microsoft SQL Server Native Client 作为底层接口,不需要任何额外的ODBC驱动。
由于本文以sqlsrv扩展程序作为教学实例,所以为了正常运行代码,请先安装上述两个驱动。
连接mssql服务
使用sqlsrv扩展程序连接mssql
首先,下载sqlsrv扩展程序并解压缩,复制php_sqlsrv_80_nts.dll文件到PHP扩展文件夹下的php\ext目录中,并在php.ini中添加以下内容。
```
extension=php_sqlsrv_80_nts.dll
```
然后,在PHP代码中使用 sqlsrv_connect() 函数连接mssql服务。
$serverName = “(local)”;
$connectionOptions = array(
“Database”=>”testdb”,
“Uid”=>”username”,
“PWD”=>”password”
);
$conn = sqlsrv_connect($serverName, $connectionOptions);
if($conn){
echo “Connection established.\n”;
}else{
echo “Connection could not be established.\n”;
die(print_r(sqlsrv_errors(), true));
}
上述代码片段中,$serverName是要连接的服务器名称,$connectionOptions是一个数组,其中包含连接选项,比如要连接的数据库名称以及用户名和密码等等。sqlsrv_connect() 函数会返回一个连接句柄($conn)。
如果连接成功,将会输出“Connection established.”。否则,将会输出“Connection could not be established.”并打印出错误信息。
使用pdo_sqlsrv扩展程序连接mssql
首先,下载pdo_sqlsrv扩展程序并解压缩,复制php_pdo_sqlsrv_80_nts.dll文件到PHP扩展文件夹下的php\ext目录中,并在php.ini中添加以下内容。
```
extension=php_pdo_sqlsrv_80_nts.dll
```
然后,在PHP代码中使用 PDO::CO—NECT() 函数连接mssql服务。
$serverName = “(local)”;
$databaseName = “testdb”;
$username = “username”;
$password = “password”;
try {
$conn = new PDO(“sqlsrv:Server=$serverName;Database=$databaseName”, $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo “Connection established.\n”;
}
catch(PDOException $e) {
echo “Connection failed: ” . $e->getMessage();
}
上述代码片段中,$serverName是要连接的服务器名称,$databaseName是要连接的数据库名称,$username是用户名,$password是密码。PDO::CO—NECT() 函数会返回一个PDO对象($conn)。
如果连接成功,将会输出“Connection established.”。否则,将会输出“Connection failed: ”并打印出错误信息。
批量数据处理
使用sqlsrv扩展程序
在使用sqlsrv扩展程序进行批量数据处理时,我们需要使用 sqlsrv_prepare() 函数准备SQL语句,使用 sqlsrv_execute() 函数执行SQL语句,以及使用 sqlsrv_fetch() 函数获取查询结果。下面是一个使用 sqlsrv 扩展程序进行批量数据处理的例子:
$serverName = “(local)”;
$connectionOptions = array(
“Database”=>”testdb”,
“Uid”=>”username”,
“PWD”=>”password”
);
$conn = sqlsrv_connect($serverName, $connectionOptions);
if($conn){
echo “Connection established.\n”;
}else{
echo “Connection could not be established.\n”;
die(print_r(sqlsrv_errors(), true));
}
$sql = “INSERT INTO Persons (FirstName, LastName, Age)
VALUES (?, ?, ?)”;
$params = array(“John”, “Doe”, 25);
$stmt = sqlsrv_prepare($conn, $sql, $params);
if($stmt){
echo “Statement prepared.\n”;
}else{
echo “Error in preparing statement.\n”;
die(print_r(sqlsrv_errors(), true));
}
if(sqlsrv_execute($stmt)){
echo “Statement executed.\n”;
}else{
echo “Error in executing statement.\n”;
die(print_r(sqlsrv_errors(), true));
}
$sql = “SELECT * FROM Persons”;
$stmt = sqlsrv_query($conn, $sql);
while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
echo “{$row['FirstName']} {$row['LastName']} is {$row['Age']} years old.\n”;
}
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
上述代码片段中,我们首先使用 sqlsrv_prepare() 函数准备插入 SQL 语句,“?”为占位符。然后,我们使用 sqlsrv_execute() 执行SQL语句并尝试插入一条新的记录。
如果执行成功,将会输出“Statement executed.”。否则,将会输出“Error in executing statement.”并打印出错误信息。
接下来,我们使用 sqlsrv_query() 函数执行查询 SQL 语句以获取 persons 表中的所有记录,再使用 sqlsrv_fetch_array() 函数逐行读取结果并将结果打印出来。最后,我们使用 sqlsrv_free_stmt() 函数释放查询结果集,并使用 sqlsrv_close() 函数关闭数据库连接。
使用pdo_sqlsrv扩展程序
在使用pdo_sqlsrv扩展程序进行批量数据处理时,我们需要使用PDO::prepare() 函数准备SQL语句,使用PDOStatement::execute() 函数执行SQL语句,以及使用PDOStatement::fetch() 函数获取查询结果。下面是一个使用pdo_sqlsrv扩展程序进行批量数据处理的例子:
$serverName = “(local)”;
$databaseName = “testdb”;
$username = “username”;
$password = “password”;
try {
$conn = new PDO(“sqlsrv:Server=$serverName;Database=$databaseName”, $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo “Connection established.\n”;
}
catch(PDOException $e) {
echo “Connection failed: ” . $e->getMessage();
}
$sql = “INSERT INTO Persons (FirstName, LastName, Age) VALUES (?, ?, ?)”;
$stmt = $conn->prepare($sql);
$params = array(“John”, “Doe”, 25);
if($stmt->execute($params)){
echo “Statement executed.\n”;
}else{
echo “Error in executing statement.\n”;
}
$sql = “SELECT * FROM Persons”;
$stmt = $conn->query($sql);
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo “{$row['FirstName']} {$row['LastName']} is {$row['Age']} years old.\n”;
}
$stmt->closeCursor();
$conn = null;
上述代码片段中,我们首先使用 PDO::prepare() 函数准备插入 SQL 语句,“?”为占位符。然后,我们使用 PDOStatement::execute() 函数执行SQL语句并尝试插入一条新的记录。
如果执行成功,将会输出“Statement executed.”。否则,将会输出“Error in executing statement.”。
接下来,我们使用 PDO::query() 函数执行查询 SQL 语句以获取 persons 表中的所有记录,再使用 PDOStatement::fetch() 函数逐行读取结果并将结果打印出来。最后,我们使用 PDOStatement::closeCursor() 函数释放查询结果集,并使用 PDO::null() 函数关闭数据库连接。
总结
本文介绍了如何使用 sqlsrv 和 pdo_sqlsrv 扩展程序连接 Microsoft SQL Server 数据库,并实现批量数据处理。使用合适的扩展程序,可以帮助我们轻松地与 Microsoft SQL Server 数据库交互,为我们的开发工作带来便利。
通过示例,我们学会使用 sqlsrv 扩展程序和 pdo_sqlsrv 扩展程序连接 Microsoft SQL Server 数据库,并实现批量数据处理。