centos下PHP不能使用odbc_connect吗?

折腾记录
1344 0

目前想实现的环境,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

https://blog.fxb.cc/60.html
最后更新 2022-12-07
评论 ( 0 )
问:肆 + 叁 = ?
OωO
隐私评论