在使用低版本php语言(如5.x.x)连接msSQL数据库时,默认使用mssql连接方式,简单实用。
php
$conn=mssql_connect('localhost',userid,password);
mssql_select_db(datatable);
$rs = mssql_query("select top 1 from user",$conn);
$row = mssql_fetch_array($rs)
但是当部分程序更新后,可能导致连接失败,此时就要考虑使用其他连接方式,目前跑通的最便捷的方案就是ODBC连接方式,方案如下:
1、在php.ini确保启用:
extension=php_odbc.dll 或者 extension=php_pdo_odbc.dll
2、然后就可以使用了,操作代码语法不同,示例如下:
php
$dsn = "odbc:Driver={SQL Server Native Client 10.0};Server=localhost;Database=datatable";
$pdo = new PDO($dsn, userid, password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->query("select top 1 * from users");
$row = $stmt->fetch(PDO::FETCH_ASSOC)
3、在同一个连接上执行多查询时,需要释放前一个结果集。如果是嵌套循环,需要外层查询数据全部取出,释放结果集,示例如下:
php
$stmt = $pdo->query("select top 3 * from orders order by id desc");
$orders = $stmt->fetchAll(PDO::FETCH_ASSOC); // 一次性取出所有数据,释放结果集
$stmt = null; // 主动释放
foreach ($orders as $row) {
$orderid = $row['orderid'];
echo "orderid: $orderid <br>";
try {
// 现在可以安全执行新查询了
$result = $pdo->query("select * from carts where orderid='$orderid'");
if ($result) {
while ($line = $result->fetch(PDO::FETCH_ASSOC)) {
echo $line['theday'] . "-" . $line['time'] . "<br>";
}
$result = null; // 释放内层结果集
}
} catch (PDOException $e) {
die("failed: " . $e->getMessage());
}
}