1. 前言
PHP语言是一个非常经典的服务器端语言,在Web服务器中使用相当广泛。而MSSQL数据库是微软推出的一种关系型数据库,由于其带有各种应用程序,包括广泛使用的业务软件,它是非常流行的商业数据库之一。在本文中,我们将学习如何通过PHP脚本连接MSSQL数据库。
2. 环境配置
2.1. 安装SQL Server驱动程序
在PHP 7之前,连接MSSQL需要使用mssql拓展。从PHP 7开始,Microsoft在GitHub上发布了一个msphpsql扩展来连接SQL Server和Azure SQL。您可以从以下地址下载。
下载地址:https://github.com/Microsoft/msphpsql/releases/
下载完成后,应该解压缩下载文件(php_pdo_sqlsrv_7_nts_x64.zip)中的DLL文件并将其放置在扩展目录中。然后在php.ini文件中启用扩展。
extension=php_pdo_sqlsrv_7_nts_x64.dll
2.2. 配置ODBC数据源
在PHP中使用ODBC数据源(Open Database Connectivity)连接MSSQL服务器。因此,我们需要先设置ODBC数据源。进入“控制面板” -> “Administrative Tools” -> “ODBC Data Sources (64-bit)”。
在“ODBC Data Source Administrator(64-bit)”窗口中,单击“添加”按钮,选择“SQL Server Native Client 11.0”并单击“完成”按钮。
在此过程中,您需要配置以下信息:
名称:您的数据源的名称。
描述:可选的数据源描述。
服务器:您要连接的SQL Server的名称或IP地址。
身份验证:此数据库的身份验证类型,可以是“SQL Server身份验证”或“Windows身份验证”。
如果您选择“SQL Server身份验证”,则需要提供用户名和密码。
单击“下一步”按钮后,看到这个:
选择您要设置的默认数据库。
单击“下一步”按钮后,看到这个:
更改数据源设置,如果需要。
在这一步中,您可以更改以下设置:
默认ID应用程序:可选应用程序的名称,默认情况下为空。
语言:ODBC驱动程序使用的语言设置。
自动提交:ODBC驱动程序需要提交每个SQL语句。如果SQL语句没有提交,它将会自动提交。
完成在“ODBC Data Source Administrator”中的数据源设置后,可以在连接代码中使用数据源名称进行连接。
3. 连接MSSQL数据库
在PHP 7中,可以使用PDO类连接Microsoft SQL Server数据库。PDO(PHP Data Objects)是PHP的一个抽象层,允许开发人员以统一的方式访问多个数据库类型。
下面是连接MSSQL数据库的示例代码:
$serverName = "localhost";
$database = "MyDatabase";
$username = "sa";
$password = "your_password";
$dsn = "sqlsrv:server=$serverName;Database=$database";
try {
$conn = new PDO($dsn, $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully.";
} catch (PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
在此示例中,我们首先定义了MSSQL服务器、数据库、用户名和密码。然后,我们创建一个DSN(数据源名称)并使用PDO类尝试连接MSSQL数据库。如果连接成功,将输出“Connected successfully.”跟随着 PDO::ATTR_ERRMODE和 ERRMODE_EXCEPTION 属性,这样连接出错时会抛出PDO异常。
4. 执行SQL查询
连接到MSSQL数据库后,可以使用PDO对象执行SQL查询。您可以使用查询语句执行各种任务,例如创建表、插入数据、更新数据和删除数据。
下面是一个示例,通过PDO对象从MSSQL数据库中检索数据:
$stmt = $conn->query("SELECT * FROM orders");
while ($row = $stmt->fetch()) {
echo $row['order_number'] . "<br>";
}
在此示例中,我们使用PDO对象执行查询。结果集存储在$stmt变量中。然后,我们使用while循环迭代结果集并输出其中的行。
4.1. PDO预处理语句
在PDO中,可以使用预处理语句执行SQL查询。预处理语句允许您通过“?”占位符安全地为查询赋值。
下面是一个示例,通过PDO对象使用预处理语句从MSSQL数据库中检索数据:
$stmt = $conn->prepare("SELECT * FROM orders WHERE order_number = ?");
$stmt->execute(array("12345"));
while ($row = $stmt->fetch()) {
echo $row['order_number'] . "<br>";
}
在此示例中,我们首先使用预处理语句定义查询。然后,我们使用数组将值传递给占位符。最后,我们使用while循环迭代结果集并输出其中的行。
4.2. PDO事务
使用PDO对象还可以执行事务。事务是一组操作,可以在数据库中作为原子执行。如果其中一个操作失败,则将回滚整个事务。
下面是一个示例,通过PDO对象插入值并使用事务更新MSSQL数据库:
try {
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->beginTransaction();
$conn->exec("INSERT INTO orders (order_number, customer_name, order_date)
VALUES ('12345', 'John Doe', '2019-01-01')");
$conn->exec("UPDATE messages SET message = 'Your order has been updated.' WHERE id = 1");
$conn->commit();
echo "Transaction completed successfully.";
} catch (PDOException $e) {
$conn->rollback();
echo "Transaction failed: " . $e->getMessage();
}
在此示例中,我们首先使用setAttribute方法将PDO的错误模式设置为异常模式。然后,我们使用beginTransaction方法启动事务并使用exec方法插入值和更新值,并使用commit方法提交事务。如果遇到任何异常,则使用$errorMsg回滚事务。
5. 结论
在本文中,我们学习了如何通过PHP脚本连接MSSQL数据库。我们还看到了如何使用PDO对象执行各种任务,例如创建表、插入数据、更新数据和删除数据。
作为一个通用的抽象层,PDO可以在许多不同的数据库之间共享通用的API和函数,从而使MSSQL数据库的使用更加容易和方便。