Php 如何在Linux上启用PDO_ODBC?
我想使用Php 如何在Linux上启用PDO_ODBC?,php,linux,php-7.2,pdo-odbc,Php,Linux,Php 7.2,Pdo Odbc,我想使用PDO_ODBC(在Centos 7 x64位上)运行Microsoft Access数据库。但不幸的是,我在页面上看到了这个错误: could not find driver 首先,我通过connection.php查找问题,但代码中似乎没有问题(在Windows7x64位上测试) 然后我想驱动程序还没有启用,我查看phpinfo()页面,是的,驱动程序还没有启用 然后进入php.ini以启用驱动程序。我在php.ini中取消注释以下行: 然后我使用以下命令重新启动apache: #
PDO_ODBC
(在Centos 7 x64位上)运行Microsoft Access数据库。但不幸的是,我在页面上看到了这个错误:
could not find driver
首先,我通过connection.php查找问题,但代码中似乎没有问题(在Windows7x64位上测试)
然后我想驱动程序还没有启用,我查看phpinfo()
页面,是的,驱动程序还没有启用
然后进入php.ini以启用驱动程序。我在php.ini中取消注释以下行:
然后我使用以下命令重新启动apache:
# /etc/init.d/apache2 restart
之后,我查看了phpinfo()
页面,不幸的是,我设置的设置尚未启用,这是phpinfo()
的屏幕截图:
您能告诉我如何在Linux(CentOS 7)上启用PDO_ODBC吗
更新以显示我的连接
connection.php:
驱动程序和扩展不是一回事 您可以在microsoft.com网站上找到驱动程序,如下所示或类似于您的特定版本要求: 您还可以尝试安装一个GNU包,如“FreeTDS” 另一个问题是,您正在编辑错误的
php.ini
文件
当运行
php-i | grep….
时,您正在/etc/php/7.2/cli/php.ini
中执行php的cli
SAPI,但您实际需要的是apache SAPI php.ini,很可能位于/etc/php/7.2/apache/php.ini
。转到您的php\u ini()
URL,正确的路径显示在第一个或第二个表中。驱动程序和扩展程序不是一回事
您可以在microsoft.com网站上找到驱动程序,如下所示或类似于您的特定版本要求:
您还可以尝试安装一个GNU包,如“FreeTDS”
另一个问题是,您正在编辑错误的php.ini
文件
当运行
php-i | grep….
时,您正在/etc/php/7.2/cli/php.ini
中执行php的cli
SAPI,但您实际需要的是apache SAPI php.ini,很可能位于/etc/php/7.2/apache/php.ini
。转到您的php\u ini()
URL,正确的路径显示在第一个或第二个表中。驱动程序和扩展是两件不同的事情。还要检查您是否为您的Web服务器而不是cli sapi编辑了正确的php.ini
@丹尼尔:我运行此命令以了解php.ini的位置:#php-I | grep“Loaded Configuration File”
。输出为加载的配置文件=>/etc/php/7.2/cli/php.ini
。我更改了输出上的php.ini设置。@DanielW:我是Linux新手,我不知道该怎么做。我跑了curlhttps://packages.microsoft.com/config/rhel/7/prod.repo >/etc/yum.repos.d/mssql release.repo
(就像文档中说的那样),然后它说-bash:/etc/yum.repos.d/mssql-release.repo:没有这样的文件或目录
。我已经将cli上的php.ini恢复到以前的状态,然后转到/etc/php/7.2/apache2/ini.php(正如phpinfo()。我上面附加的屏幕截图之类的信息已经不存在了。#php-i | grep“加载的配置文件”
提供的信息是否比phpinfo()可靠
?或许我在某个地方出错了。顺便说一下,我试着运行了sudo curlhttps://packages.microsoft.com/config/rhel/7/prod.repo >/etc/yum.repos.d/mssql release.repo
仍然面临相同的拒绝。驱动程序和扩展是两件不同的事情。还要检查您是否为您的Web服务编辑了正确的php.ini
r、 而不是cli sapi的命令。@DanielW.:我运行此命令以了解php.ini的位置:#php-I|grep“加载的配置文件”
。输出是加载的配置文件=>/etc/php/7.2/cli/php.ini
。我更改了输出上的php.ini设置。@DanielW:我是Linux新手,我不知道文档上说的是什么。我运行了curlhttps://packages.microsoft.com/config/rhel/7/prod.repo >/etc/yum.repos.d/mssql release.repo
(如文档所述)在终端中,然后它说-bash:/etc/yum.repos.d/mssql-release.repo:没有这样的文件或目录
。我已将cli上的php.ini恢复到以前的状态,然后转到/etc/php/7.2/apache2/ini.php(如phpinfo()
站点所述)并取消注释extension=pdo_odbc
并重新启动类似上述命令的apache2。在再次检查phpinfo()
后,mysql的pdo驱动程序消失了(我也取消了对这一个的注释)。我上面附加的屏幕截图之类的信息不再存在。这是php-I|grep给出的信息吗“加载的配置文件”
比phpinfo()可靠
?或许我在某个地方出错了。顺便说一下,我试着运行了sudo curlhttps://packages.microsoft.com/config/rhel/7/prod.repo >/etc/yum.repos.d/mssql release.repo
仍然面临相同的拒绝。我将检查php.ini中关于PDO mysql的内容是否不再存在于列表中。关于安装Microsoft ODBC驱动程序,所有的命令应该一个接一个地运行,还是一次运行?(顺便说一下,我的curl版本错了,我的错)@DontbullingMe抱歉,我无法得到一个有效的解决方案,因为我既不使用CentOS也不使用ODBC。我想已经有关于Stackoverflow的主题,关于安装FreeTDS、unixODBC或Microsoft的ODBC。因此,我已经在Ubuntu v.18.04.1上安装了unixODBC v.2.3.4,使用此命令#apt get install unixODBC
,然后我使用此命令重新启动apache2有限公司
# /etc/init.d/apache2 restart
<?php
$dsn = "{Microsoft Access Driver (*.mdb, *.accdb)}";
$db = "/home/www/html/cetak_absensi/uploaded/db_access/my_access_db.mdb";
$user = "";
$pass = "";
if (!file_exists($db)) {
die("File is not exists ! " . $db);
}else{
try {
$koneksi = new PDO("odbc:DRIVER=".$dsn.";charset=UTF-8; Dbq=".$db."; Uid=".$user."; Pwd=".$pass.";");
$koneksi->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo "There is an error : <i>" . $e->getMessage() . "</i>";
die();
}
}