«
使用PDO_ODBC测试PHP服务器到SQL Server数据库的连接时间

时间:2026-3-10    作者:范文泉    分类: php


<?php
/**
 * 使用 PDO_ODBC 测试 PHP 服务器到 SQL Server 数据库的连接时间
 */

// ========== 配置区域 ==========
$db_host = '';   // 例如:'192.168.1.100' 或 'localhost\SQLEXPRESS'(带实例名)
$db_port = 1433;                       // SQL Server 默认端口,如有不同请修改
$db_name = '';                  // 要连接的数据库
$db_user = '';                    // SQL Server 登录名(如 'sa')
$db_pass = '';                      // 对应的密码
// ==============================

// 构建 DSN(数据源名称)
// 格式:"odbc:Driver={SQL Server};Server=服务器地址;端口;Database=数据库名"
// 如果服务器是命名实例,Server 部分可写为:'服务器地址\实例名,端口'
$dsn = "odbc:Driver={SQL Server};Server={$db_host};{$db_port};Database={$db_name},Network=DBMSSOCN";

// 设置 PDO 属性:错误模式为异常,可选设置连接超时(秒)
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    // PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    // PDO::ATTR_TIMEOUT             => 5,   // 连接超时秒数(可选)
];

// 记录开始时间(微秒)
$start = microtime(true);

try {
    // 尝试建立连接
    $pdo = new PDO($dsn, $db_user, $db_pass, $options);
    $connected = true;
} catch (PDOException $e) {
    $connected = false;
    $errorMsg = $e->getMessage();
}

// 无论成功与否,记录结束时间
$end = microtime(true);
$elapsedMs = round(($end - $start) * 1000, 2); // 转换为毫秒

// 输出结果
if ($connected) {
    echo "✅ SQL Server 连接成功!\n";
    echo "⏱️  连接耗时:{$elapsedMs} 毫秒\n";

    // 可选:执行一次简单查询,测试整体响应速度
    $queryStart = microtime(true);
    try {
        $stmt = $pdo->query("SELECT 1 AS test");
        $row = $stmt->fetch();
        $queryEnd = microtime(true);
        $queryMs = round(($queryEnd - $queryStart) * 1000, 2);
        echo "⚡ 简单查询耗时:{$queryMs} 毫秒\n";
    } catch (PDOException $e) {
        echo "⚠️ 查询执行失败:" . $e->getMessage() . "\n";
    }

    // 关闭连接(PDO 对象销毁时会自动关闭,此处显式置空)
    $pdo = null;
} else {
    echo "❌ 连接失败,耗时:{$elapsedMs} 毫秒\n";
    echo "错误信息:{$errorMsg}\n";
}