后端php连接SQL Server数据库报错解决方案

在使用低版本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());
    }
}
相关推荐
一只鹿鹿鹿2 小时前
政务外网整体设计方案(PPT)
大数据·数据库·web安全·系统安全·流程图·政务
2603_965148112 小时前
社区与学习资源:从入门到精通的API选品学习路径
数据库·人工智能·python·学习·数据挖掘
AI砖家2 小时前
安全进入 Agent Loop:2027 年 Coding Agent 的决胜点
数据库·安全·codex·vibecoding
wangqiaowq3 小时前
SQL server C盘空间占满的处理
数据库·sql
文人sec3 小时前
SQL基础入门笔记 | 从零基础到掌握核心查询语句
数据库·笔记·sql
数字新视界3 小时前
机房动环监控提升运维效率
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
程序猿追3 小时前
kotlin-retry 接入鸿蒙后,怎样确认它真的会停止重试
开发语言·kotlin·harmonyos
我是人✓3 小时前
Java文件上传三方式对比:从传统到SpringBoot
java·开发语言
SelectDB技术团队3 小时前
冷热分层从建到验:Storage Policy 创建、表级与分区级绑定、SHOW TABLETS 验证的完整命令
大数据·数据库·elasticsearch·搜索引擎·数据分析·apache doris·冷热分层
智能直播3 小时前
网络RTMP拉流不卡顿、声音不同步,一文讲透缓冲区、时间戳
开发语言·ffmpeg·php·音视频·视频编解码