<?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";
}