如何正确配置sqlsrv_connect()函数?拟切换至PDO作参考
解决sqlsrv_connect()引发HTTP 500错误的方案及PDO替代示例
先排查核心问题(sqlsrv方向)
- 抓具体错误信息:HTTP 500是泛错误,必须看日志才能定位。
- 临时开启PHP错误显示:在测试页面开头加
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);,刷新页面看具体报错。 - 直接查日志:Apache错误日志路径一般是
/var/log/apache2/error.log,PHP错误日志可在php.ini里找error_log配置项对应的路径。
- 临时开启PHP错误显示:在测试页面开头加
- 确认sqlsrv扩展真的加载成功:
- 写个
phpinfo()页面,搜索sqlsrv和pdo_sqlsrv,看是否存在对应的模块信息。 - 用CLI命令验证:
php -m | grep sqlsrv,如果没输出,说明扩展没装好;如果CLI有但Apache里没有,去/etc/php/[你的PHP版本]/apache2/php.ini里确认extension=sqlsrv.so和extension=pdo_sqlsrv.so没被注释,然后重启Apache:systemctl restart apache2。
- 写个
- 检查连接参数与SQL Server配置:
- 本地连接尽量用
127.0.0.1,1433代替localhost(避免解析问题),如果是命名实例,用127.0.0.1\实例名,1433。 - 确认SQL Server已启用TCP/IP协议:打开SQL Server配置管理器,找到SQL Server网络配置,启用TCP/IP,重启SQL Server服务。
- 确认SQL Server允许SQL身份验证(如果用账号密码连接),并且登录账号有对应数据库的访问权限。
- 本地连接尽量用
- 测试网络连通性:用Apache运行用户测试端口是否可达,执行
sudo -u www-data nc -zv 127.0.0.1 1433,如果显示成功,说明网络没问题;否则检查防火墙或者SQL Server端口配置。
PDO连接SQL Server参考示例
PDO的错误处理更直观,适合排查问题,以下是基础连接代码:
<?php ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); try { $dsn = "sqlsrv:Server=127.0.0.1,1433;Database=你的数据库名"; $username = "你的SQL账号"; $password = "你的SQL密码"; $pdo = new PDO($dsn, $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "连接成功!"; } catch(PDOException $e) { die("连接失败: " . $e->getMessage()); } ?>
如果连接失败,catch块会直接输出具体错误信息,方便定位问题。
内容的提问来源于stack exchange,提问作者doge guide
相关产品推荐
相关产品推荐

