目前想实现的环境,Linux PHP7 + FreeTDS + 访问mssql2000
现在的进展为 unixodbc
√ freetds
√
参考教程:http://voidcat.cn/index.php/2020/01/03/centos-sql-server/
看了很多教程,发现大家的实现都是通过 new PDO(),也就是扩展PHP的pdo_odbc
参考教程:https://blog.ll00.cn/archives/122.html
另外CSDN上一堆垃圾转载 根本就解决不了问题 ,也Google搜了 可能大家对这种需求的少吧
找不到有用的信息...
要么只能在win机上用... 等待进一步解决吧
2021-12-26 经过在MJJ论坛 100¥ 找人求助,现已解决! 过程比较麻烦
且通过实测, odbc_connect 在linux环境下通过第三方数据源freeTDS 运行效率没有new PDO() 效率高
但还是记录一下,免得后面有同等需求的人再次走弯路!
unixodbc + freetds 这些搭建和配置就不讲了,网上也有很多这种转载教程
注意是解决,在宝塔PHP环境下重新编译 并且让它支持odbc扩展
如果宝塔环境中,安装的php版本是7.3.29的,请下载 php-7.3.29 源码文件。
解压后,在原宝塔的php配置参数基础上加 '--with-unixODBC=/usr/local/unixODBC' ,再编译和安装
进初始目录cd /
下载PHP文件
https://www.php.net/distributions/php-7.3.29.tar.gz
解压
tar xzvf php-7.3.29.tar.gz
cd php-7.3.29
终端按如下进行配置
[root@localhost php-7.3.29]# './configure' '--prefix=/www/server/php/73' '--with-config-file-path=/www/server/php/73/etc' '--enable-fpm' '--with-fpm-user=www' '--with-fpm-group=www' '--enable-mysqlnd' '--with-mysqli=mysqlnd' '--with-pdo-mysql=mysqlnd' '--with-iconv-dir' '--with-freetype-dir=/usr/local/freetype' '--with-jpeg-dir' '--with-png-dir' '--with-zlib' '--with-libxml-dir=/usr' '--enable-xml' '--disable-rpath' '--enable-bcmath' '--enable-shmop' '--enable-sysvsem' '--enable-inline-optimization' '--with-curl=/usr/local/curl' '--enable-mbregex' '--enable-mbstring' '--enable-intl' '--enable-ftp' '--with-gd' '--with-openssl=/usr/local/openssl' '--with-mhash' '--enable-pcntl' '--enable-sockets' '--with-xmlrpc' '--enable-soap' '--with-gettext' '--disable-fileinfo' '--enable-opcache' '--with-sodium' '--with-webp' '--with-unixODBC=/usr/local/unixODBC'
然后 (注意,此过程可能耗时过长,因为我是在国外垃圾VPS上进行测试的)
make && make install
如果顺利,那么新版本的文件会覆盖原宝塔安装的php文件
使用命令查看是否有odbc扩展 如下代表OK
[root@cc8 php-7.3.29]# php -i | grep odbc
odbc
ODBC_LIBS => -lodbc
odbc.allow_persistent => On => On
odbc.check_persistent => On => On
odbc.default_cursortype => Static cursor => Static cursor
odbc.default_db => no value => no value
odbc.default_pw => no value => no value
odbc.default_user => no value => no value
odbc.defaultbinmode => return as is => return as is
odbc.defaultlrl => return up to 4096 bytes => return up to 4096 bytes
odbc.max_links => Unlimited => Unlimited
odbc.max_persistent => Unlimited => Unlimited
PDO drivers => sqlite, mysql, odbc
宝塔php.ini 里的 ;extension=odbc 不用管~
最后重启PHP 然后在php.info页面搜索odbc 能够看到单独的扩展了
这个办法感人觉得可能有点儿强制性的重新编译,可能不太正规范操作,但又确实性的能解决问题
毕竟网上在linux 下对宝塔环境PHP 配置 ODBC 单独扩展的教程实在是太少了
大家都是清一色的转载教程如何pdo_odbc ,可能确实new pdo() 已经成为当下主流的数据库链接方式了吧
PS:
带上参数 --with-unixODBC=/usr/local/unixODBC 配置php时
需要确认 /usr/local/unixODBC 是有相应文件的
odbc_connect 连接命令例子
$con = odbc_connect("DRIVER=FreeTDS; Server=192.168.1.1; Port=1433;Database=sjk", 'sa', '123456.');
if (!$con) {
exit('数据库连接失败');
}
$sql = "SELECT * FROM 数据表 where 参数 = '{$id}' or cnum = '{$id}' or crno = '{$id}' or ccno = '{$id}'";
$result = odbc_exec($con,$sql);
再来一个pdo链接例子 //注意看ClientCharset=UTF-8
看乱码与否再加
try{
$pdo = new PDO("odbc:DRIVER={FreeTDS};Server=111.50.68.111,1433;Database=emmis;ClientCharset=UTF-8",'sa','password');
//,array(PDO::ATTR_PERSISTENT=>true)
}catch (PDOException $e){
die("数据库连接失败" . $e->getMessage());
}
宝塔安装pdo_odbc扩展 参阅
https://cloud.tencent.com/developer/article/1864397?from=article.detail.2006011
http://blog.chinaunix.net/uid-10449864-id-2956897.html
https://blog.ll00.cn/archives/122.html