手头的树莓派3已经装了LAMP,也做成功了用python借助FreeTDS访问MSSQL的实验,然后想测试下用PHP脚本直接访问MSSQL。
查阅了一些资料,发现可以用php5-sybase实现。你没看错,就是sybase。在MS SQL SERVER的发展历史中,微软最初就是和Sybase合作的,因此这是可以理解的。这就很简单了,sudo apt-get install php5-sybase。完了以后重启apache服务,或者干脆简单粗暴的重启树莓派。
重启后用phpinfo();测一下,应该能出来关于mssql的内容,PDO drivers 里也应该包含 dblib。
做到这里已经可以做测试了。以下是示例:
$db = new PDO("dblib:host=MSSQL服务器:1433;dbname=数据库名;","用户名","密码");
不报错就对了。
但这样有个严重问题,我的SQLSERVER是简体中文版的,使用默认的字符集安装,此时php返回查询结果的中文会乱码,即便respi-config里面把四个zh_cn开头的字符集都装过。综合测试了网上的几种说法,目前我的解决方案是使用iconv函数。
-
-
//ini_set('display_errors','On'); #如果有错,展示详细错
-
-
$db = new PDO( "dblib:host=192.168.199.180:1433;dbname=demo;", "sa", "这是一坨马赛克");
-
$sql = "select * from t_demo";
-
-
foreach ($db->query($sql) as $rows)
-
{
-
//$f1 = $rows[1]; // 中文乱码
-
$f1 = iconv( 'GBK', 'UTF-8//IGNORE', $rows[ 1]);
-
print_r($f1);
-
}
-
-
$db = null;
-
按网上的其他说法,连接字符串里加charset=GBK,freetds的配置文件里的[global]中加一句client charset = GBK 等等,但目前我都没用倒是也行。先记一下,也许哪个特定情况下有用。