介绍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注入攻击。
在实际开发中,我们应该根据具体情况选择不同的函数和方法,以提高效率和安全性。