如何在Debian系统的PHP中连接远程SQL Anywhere数据库?
在Debian 9 + PHP 7.0环境下连接远程SQL Anywhere数据库
我来帮你搞定这个跨平台的数据库连接问题,毕竟Windows到Linux的ODBC配置确实有不少细节要注意,下面是一步步的实操方案:
1. 安装SQL Anywhere Linux驱动
首先你需要和Windows端匹配的SQL Anywhere 16版本Linux驱动包,解压后执行安装脚本:
# 假设驱动包已解压到当前目录的sqlanywhere16文件夹 cd sqlanywhere16/linux_x86_64 chmod +x setup.sh sudo ./setup.sh
安装过程按提示选默认路径即可,一般会安装在/opt/sqlanywhere16。
2. 配置UnixODBC驱动条目
编辑UnixODBC的驱动配置文件/etc/odbcinst.ini,添加以下内容:
[SQL Anywhere 16] Description=SQL Anywhere 16 ODBC Driver Driver=/opt/sqlanywhere16/lib64/libdbodbc16.so Setup=/opt/sqlanywhere16/lib64/libdbodbc16.so FileUsage=1
保存后用odbcinst -q -d命令验证,能看到[SQL Anywhere 16]条目就说明驱动识别成功了。
3. 配置环境变量(关键步骤!)
SQL Anywhere驱动依赖特定环境变量,要确保web服务能加载到这些变量:
- 如果是Apache,可在
/etc/apache2/envvars里添加:
export LD_LIBRARY_PATH=/opt/sqlanywhere16/lib64 export SQLANY16=/opt/sqlanywhere16
添加后重启Apache:sudo systemctl restart apache2
- 也可以在PHP脚本开头直接设置(适合临时测试):
putenv('LD_LIBRARY_PATH=/opt/sqlanywhere16/lib64'); putenv('SQLANY16=/opt/sqlanywhere16');
4. 确保PHP ODBC扩展已安装
执行命令安装PHP 7.0的ODBC扩展:
sudo apt-get install php7.0-odbc
安装完成后重启web服务,用phpinfo()页面检查是否有ODBC相关模块信息。
5. 测试PHP连接
用PDO_ODBC写个简单的测试脚本,连接字符串和Windows端几乎一致,注意驱动名称要和odbcinst.ini里的配置匹配:
<?php // 若未在系统层面配置环境变量,在此设置 putenv('LD_LIBRARY_PATH=/opt/sqlanywhere16/lib64'); putenv('SQLANY16=/opt/sqlanywhere16'); try { $dsn = 'odbc:Driver={SQL Anywhere 16};Server=serveur-02;Port=2638;Database=excalib;Uid=username;Pwd=pwd'; $pdo = new PDO($dsn); echo "连接成功!"; // 执行简单查询验证 $stmt = $pdo->query("SELECT 1"); var_dump($stmt->fetch()); } catch (PDOException $e) { echo "连接失败:" . $e->getMessage(); } ?>
把脚本放到web目录访问,就能验证连接是否正常。
常见排坑点
- 若提示找不到驱动,检查
LD_LIBRARY_PATH路径是否正确,同时确保驱动文件权限允许web用户(比如www-data)读取。 - 先验证Debian服务器能通远程SQL Anywhere的2638端口:
telnet serveur-02 2638,不通的话要检查两边防火墙规则。 - 如果驱动名称不生效,可尝试直接用驱动文件路径代替连接字符串里的驱动名,比如
Driver=/opt/sqlanywhere16/lib64/libdbodbc16.so。
内容的提问来源于stack exchange,提问作者Nihiora
相关产品推荐
相关产品推荐

