PHP操作MSSQL——实现高效读写

介绍MSSQL和PHP

Microsoft SQL Server(简称MSSQL)是一种关系型数据库管理系统,由美国微软公司开发。而PHP是一种开源的服务器端脚本语言,适用于Web开发。

在实际开发中,我们有时需要使用PHP来对MSSQL进行操作,例如实现高效读写等。

连接MSSQL数据库

使用ODBC连接

在PHP中,我们可以使用ODBC来连接MSSQL数据库。

//连接数据库

$db = odbc_connect("Driver={SQL Server Native Client 11.0};Server=myServer;Database=myDB;", "myUsername", "myPassword");

其中,Driver参数指定了ODBC驱动,Server参数指定了MSSQL服务器地址和实例名,Database参数指定了要连接的数据库名称,myUsername和myPassword则分别是用户名和密码。

使用SQLSRV连接

除了ODBC,PHP还支持使用SQLSRV扩展连接MSSQL数据库。

//加载SQLSRV扩展

if (!extension_loaded('sqlsrv')) {

die('sqlsrv扩展未安装或加载失败!');

}

//连接数据库

$serverName = "myServer\myInstance, 1433";

$connectionOptions = array(

"Database" => "myDB",

"Uid" => "myUsername",

"PWD" => "myPassword"

);

$conn = sqlsrv_connect($serverName, $connectionOptions);

其中,$serverName指定了MSSQL服务器地址和实例名,$connectionOptions包含了要连接的数据库名称、用户名和密码。

读写MSSQL数据库

连接成功后,我们就可以对MSSQL数据库进行读写。

读取数据

要从MSSQL数据库中读取数据,可以使用SQL语句,然后将结果集处理后输出。

//查询数据

$sql = "SELECT * FROM myTable";

$rs = odbc_exec($db, $sql);

//输出数据

while(odbc_fetch_row($rs)) {

$id = odbc_result($rs, "id");

$name = odbc_result($rs, "name");

$age = odbc_result($rs, "age");

echo "id: $id, name: $name, age: $age";

}

上面的代码先使用SELECT语句从myTable表中查询数据,然后使用odbc_fetch_row()函数逐行读取结果集,使用odbc_result()函数获取每个字段的值,并输出到页面上。

写入数据

要向MSSQL数据库中写入数据,可以使用INSERT语句。

//插入数据

$sql = "INSERT INTO myTable(name, age) VALUES('Tom', 20)";

if (odbc_exec($db, $sql)) {

echo "插入成功!";

} else {

echo "插入失败!";

}

上面的代码使用INSERT语句向myTable表中插入一条数据,使用odbc_exec()函数执行SQL语句,如果执行成功,就输出“插入成功!”。

使用事务

在MSSQL数据库中,我们可以使用事务(Transaction)来控制一组相关操作的执行。如果事务中的任何一条SQL语句执行失败,整个事务就会被回滚(Rollback),也就是撤销之前所有的操作。

//开始事务

odbc_autocommit($db, false);

//执行SQL语句

$sql1 = "UPDATE myTable SET age=age+1 WHERE id=1";

$sql2 = "UPDATE myTable SET age=age-1 WHERE id=2";

odbc_exec($db, $sql1);

odbc_exec($db, $sql2);

//提交事务

if (odbc_commit($db)) {

echo "事务提交成功!";

} else {

echo "事务提交失败!";

odbc_rollback($db);

}

上面的代码使用odbc_autocommit()函数关闭自动提交模式,然后执行了两条UPDATE语句,将id为1的记录age字段+1,将id为2的记录age字段-1。最后使用odbc_commit()函数提交事务。如果提交成功,就输出“事务提交成功!”,否则输出“事务提交失败!”并使用odbc_rollback()函数回滚事务。

使用预处理语句

在编写PHP程序的过程中,我们经常会拼接SQL语句,将变量的值拼接到SQL语句中,这样容易引发SQL注入攻击,而且效率也不高。尤其是在循环中执行多次拼接,会浪费很多时间。

为了避免这种问题,我们可以使用预处理语句(Prepared Statement),它可以将SQL语句和参数分离,将参数的值绑定到SQL语句上,从而避免了SQL注入攻击,还能提高执行效率。

使用ODBC预处理语句

//准备查询语句

$sql = "SELECT * FROM myTable WHERE age=?";

$stmt = odbc_prepare($db, $sql);

//绑定参数并执行查询

$age = 18;

odbc_execute($stmt, array($age));

//输出结果

while($row = odbc_fetch_array($stmt)) {

$id = $row["id"];

$name = $row["name"];

$age = $row["age"];

echo "id: $id, name: $name, age: $age";

}

上面的代码首先使用odbc_prepare()函数准备一条SELECT语句,其中的?表示参数的位置,然后使用odbc_execute()函数执行查询,同时将参数的值传递给函数。最后使用odbc_fetch_array()函数逐行读取结果集,并输出结果。

使用SQLSRV预处理语句

//准备插入语句

$sql = "INSERT INTO myTable(name, age) VALUES(?, ?)";

$params = array("Tom", 20);

$stmt = sqlsrv_prepare($conn, $sql, $params);

//执行插入语句

if (sqlsrv_execute($stmt)) {

echo "插入成功!";

} else {

echo "插入失败!";

}

上面的代码使用sqlsrv_prepare()函数准备一条INSERT语句,其中的?表示参数的位置,然后使用sqlsrv_execute()函数执行查询,同时将参数的值传递给函数。如果插入成功,就输出“插入成功!”。

总结

通过本文的介绍,我们了解了如何使用PHP连接MSSQL数据库,以及如何实现高效读写。此外,我们还学习了使用事务和预处理语句来控制数据库的操作和防止SQL注入攻击。

在实际开发中,我们应该根据具体情况选择不同的函数和方法,以提高效率和安全性。

数据库标签