php连接mssql服务,实现批量数据处理

介绍

在开发中,如果需要连接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 数据库,并实现批量数据处理。

数据库标签