什么是PDO?
PDO是PHP Database Object的缩写,是PHP的一个数据库抽象层。利用PDO,我们可以轻松地使用不同的数据库,而不必去更改我们的代码,只需要更改数据库驱动即可。PDO支持的数据库种类非常多,包括MySQL、SQLite、Oracle、PostgreSQL等等,当然也包括本文要介绍的MSSQL数据库。
安装和配置PDO MSSQL驱动
安装PDO MSSQL驱动
在PHP版本5以上,PDO已经成为默认的扩展。通过phpinfo()函数可以查看当前是否安装了PDO扩展。
//查看phpinfo
phpinfo();
如果已经安装了PDO,我们只需要安装PDO MSSQL驱动就可以连接MSSQL数据库。
在Linux上,我们可以使用yum工具来安装FreeTDS驱动,它可以提供对MS SQL Server和Sybase的支持。
yum install freetds freetds-devel unixODBC unixODBC-devel
在Windows平台下,我们可以下载Microsoft的ODBC驱动,它可以提供对MS SQL Server的支持。
安装完成后,通过PDO连接MSSQL数据库的代码如下:
$pdo = new PDO("dblib:host={$host};dbname={$dbname}", $user, $password);
其中,$host、$dbname、$user、$password分别代表主机名、数据库名、用户名、密码。
配置PDO MSSQL驱动
在Linux上,我们需要在freetds.conf文件中配置ODBC驱动的信息。在Windows上,我们需要创建一个ODBC数据源。
Linux配置:
vim /etc/freetds.conf
[mssql]
host = your_hostname_or_ip
port = your_port
username = your_username
password = your_password
database = your_database
tds version = 8.0
Windows配置:
首先,我们需要在控制面板->管理工具->ODBC数据源中创建数据源。打开ODBC数据源,选择“系统DSN”选项卡,点击添加按钮,找到“SQL Server”数据源,点击下一步。
按照向导提示,配置数据源的名称、描述、主机名、数据库名、用户名、密码等信息,然后点击完成即可。
$pdo = new PDO("odbc:your_datasource_name", $user, $password);
其中,your_datasource_name是你创建的ODBC数据源名称。
使用PDO MSSQL驱动连接MSSQL数据库
连接到MSSQL数据库的代码如下:
$host = "localhost";
$dbname = "testdb";
$user = "sa";
$password = "password123";
//使用dblib驱动
$pdo = new PDO("dblib:host={$host};dbname={$dbname}", $user, $password);
//使用ODBC驱动
//$pdo = new PDO("odbc:your_datasource_name", $user, $password);
其中,我们使用PDO的构造函数,并传入连接参数。dblib是FreeTDS提供的驱动,ODBC是Microsoft提供的驱动。
连接成功后,我们可以执行SQL语句,查询数据库中的数据。
使用PDO MSSQL驱动执行SQL语句
查询数据
查询数据库表的数据,使用PDO的query方法:
$stmt = $pdo->query("SELECT * FROM products");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row['id'] . ' ' . $row['name'] . ' ' . $row['price'] . "\n";
}
其中,query方法执行一条SQL语句,并返回一个PDOStatement对象。PDOStatement对象有一个fetch方法,可以从结果集中提取数据。
如果我们只需要获取一行数据,可以使用fetch方法的PDO::FETCH_ASSOC参数:
$row = $stmt->fetch(PDO::FETCH_ASSOC);
echo $row['id'] . ' ' . $row['name'] . ' ' . $row['price'] . "\n";
如果我们需要获取所有的数据行,可以使用fetchAll方法:
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $row) {
echo $row['id'] . ' ' . $row['name'] . ' ' . $row['price'] . "\n";
}
插入数据
插入数据库表的数据,可以使用PDO的prepare和execute方法。
$stmt = $pdo->prepare("INSERT INTO products (name, price) VALUES (?, ?)");
$stmt->execute(['Apple', 2.99]);
其中,prepare方法预处理SQL语句,execute方法执行SQL语句,execute方法的参数是一个包含参数值的数组。
更新数据
更新数据库表的数据,也可以使用PDO的prepare和execute方法。
$stmt = $pdo->prepare("UPDATE products SET price = ? WHERE name = ?");
$stmt->execute([3.99, 'Apple']);
其中,prepare方法预处理SQL语句,execute方法执行SQL语句,execute方法的参数是一个包含参数值的数组。
删除数据
删除数据库表的数据,同样可以使用PDO的prepare和execute方法。
$stmt = $pdo->prepare("DELETE FROM products WHERE name = ?");
$stmt->execute(['Apple']);
其中,prepare方法预处理SQL语句,execute方法执行SQL语句,execute方法的参数是一个包含参数值的数组。
小结
PDO是PHP的一个数据库抽象层,支持多种数据库,包括MSSQL。我们可以通过安装和配置PDO MSSQL驱动来连接MSSQL数据库,并使用PDO的query、prepare、execute等方法来执行SQL语句。在运用PDO MSSQL驱动操作MSSQL数据库时,我们需要注意安全性和可读性,尽量使用预处理语句和参数绑定,避免SQL注入攻击。