如何在 PHP Linux 中访问 .mdb 数据源?

2024-03-16

我刚刚安装unixODBC为了访问我的 .mdb 数据源PHP.5.3 CentOS 6.10使用这个命令:

# yum install unixODBC  

在 Windows 中我可以简单地取消注释extension=php_pdo_odbc.dll on php.ini并重新启动httpd/阿帕奇为了访问我的.mdb,然后通过建立连接PDO像这样 :

<?php

    $dsn = "{Microsoft Access Driver (*.mdb, *.accdb)}";
    $db = "/home/www/html/cetak_absensi/uploaded/db_access/myDB.mdb";
    $user = "";
    $pass = "";

    $connection = new PDO("odbc:DRIVER=".$dsn.";charset=UTF-8; Dbq=".$db."; Uid=".$user."; Pwd=".$pass.";");
    ...
    ...
?>

安装后unixODBC and PDO-ODBC已经在我的 php 上运行,我运行上面的代码,不幸的是我遇到了这个错误:

[unixODBC][Driver Manager]Data source name not found, and no default driver specified php linux

在这里搜索另一篇文章后,我认为我的 DSN 不正确。

Linux 中正确的 DSN 是什么?

真的可以访问我的吗.mdb数据来源通过PHP-PDO in Linux尤其CentOS 6.10?

UPDATE

经过搜索,我发现一篇文章对此进行了解释。 我安装了libmdodbc1从这个资源libmdbodbc https://centos.pkgs.org/6/forensics-x86_64/libmdbodbc1-0.7-43.13.el6.x86_64.rpm.html并添加以下行/etc/odbcinst.ini :

# Source Came From:
# 1. https://centos.pkgs.org/6/forensics-x86_64/libmdbodbc1-0.7-43.13.el6.x86_64.rpm.html
# 2. https://gist.github.com/amirkdv/9672857
# etc.
[MDBTools]
Description = MDBTools Driver
Driver64      = /usr/lib64/libmdbodbc.so.1.0.0
Setup64       = /usr/lib64/libmdbodbc.so.1.0.0
FileUsage   = 1
UsageCount  = 1

然后我像这样更改连接:

连接.php

<?php
    /*
    ini_set('upload_max_filesize', '100M');
    ini_set('post_max_size', '100M');
    echo ini_get('upload_max_filesize'), ", " , ini_get('post_max_size');
    echo php_uname();
    */
    set_time_limit(600);

    $query = 'SELECT * FROM LEAVECLASS1';
    $mdb_file = '/var/www/html/cetak_absensi/uploaded/db_access/db_absensi_backup.mdb';
    $uname = explode(" ",php_uname());
    print_r($uname);
    $os = $uname[0];
    echo "<br>";
    echo $os;
    switch ($os){
      case 'Windows':
        $driver = '{Microsoft Access Driver (*.mdb)}';
        break;
      case 'Linux':
        $driver = 'MDBTools';
        break;
      default:
        exit("Don't know about this OS");
    }
    $dataSourceName = "odbc:Driver=$driver;DBQ=$mdb_file;";
    echo "<br>";

    try {
        $connection = new \PDO($dataSourceName);
        $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $result = $connection->prepare($query);
        $result->execute();
        $data = $result->fetchAll(\PDO::FETCH_ASSOC);
    } catch (PDOException $e) {
        echo "<br><br>";
        echo "There is an error " . $e->getMessage();
        echo "<br><br>";
    }

    // I think this following code cause this error:
    //$result = $connection->query($query)->fetchAll(\PDO::FETCH_ASSOC);

    echo "<br>";
    print_r($data);
    echo "<br>";
    var_dump($connection);

运行此代码后,浏览器显示:

The connection was reset

我增加了我的内存限制 and 最大执行时间 in php.ini但仍然抛出相同的消息。

您能告诉我为什么浏览器会抛出此消息吗?

也许我设置了错误的配置或者我的.mdb数据太大。

UPDATE 2

我卸载了我的libmdodbc1(我以前的libmdodbc上面的第一次更新)。然后使用安装 libodbc1$ sudo yum install libmdodbc1和我的配置/etc/odbcinst.ini仍然与以前相同(与上面第一次更新相同),然后重新启动服务。我参考的是这篇文章如何使用 PHP5 PDO 和 ODBC 在 Linux 中处理 MS Access MDB 文件 https://gist.github.com/amirkdv/9672857.

此外我改变了$mdb_file变量为$mdb_file = '/var/www/html/cetak_absensi/uploaded/db_access/db_new.mdb'只有一个表,其中有 3 条记录。我还添加了var_dump($data);查看获取的数据。

db_new.mdb 看起来像这样:

ID  Nama Depan     Nama Belakang      Pekerjaan
1   First Name 1    Last Name 1       Programmer
2   First Name 2    Last Name 2       Guru
3   First Name 3                      Dokter

我跑完之后连接.php, var_dump($connection); and var_dump($data)分别结果:

// var_dump($connection);
object(PDO)#1 (0) { }

// var_dump($data);
array(2) { [0]=> array(4) { ["ID"]=> string(1) "2" ["Nama Depan"]=> NULL ["Nama Belakang"]=> NULL ["Pekerjaan"]=> NULL } [1]=> array(4) { ["ID"]=> string(1) "3" ["Nama Depan"]=> NULL ["Nama Belakang"]=> NULL ["Pekerjaan"]=> NULL } }

(第一次审判结束)。

Why $data只有字段名 with NULLs value ?

以为连接已经建立了,我用以前的测试过.mdb文件(db_absensi_backup.mdb)和页面仍然显示相同的问题。

The connection was reset

And the 错误日志 said:

[Tue Jun 02 14:47:12 2020] [notice] child pid 5366 exit signal Segmentation fault (11)

(第二次审判结束)。

第二次更新的第一次试验几乎成功了,而第二次试验则与我真实的.mdb文件似乎该包已过期。

你能告诉我为什么会发生这些吗?

这些是因为我之前配置错误吗?


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 PHP Linux 中访问 .mdb 数据源? 的相关文章

  • Yii2:无法将列值更新+1

    创建新记录时 我需要将列值更新 1 public function actionCreate model new CreateBookings if model gt load Yii app gt request gt post Yii
  • 如何在 bash_profile 文件中添加导出语句?

    我正在尝试了解是否必须添加导出语句来在 bash profile 文件中设置变量 我该怎么做呢 例如 如果我必须添加 export AX name 那么我应该将其简单地写在文件末尾还是我还需要编写其他内容 简单写一下export AS na
  • 获取php中两个日期之间的天数[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我试图获取两个日期之间的天数 但返回的结果不正确 这是我的尝试 t time get the time Y m d g
  • Laravel Blade 中的动态行数

    我想要像这样的表中有动态的行数 number name 1 Devy 这是我的 Blade 模板 thead th number th th name th thead tbody foreach aaa as value tr td td
  • 打印本周星期一的日期(在 bash 中)

    我想获取本周星期一的 YYYYMMdd 格式的日期 例如 今天是 20110627 从明天到周日 我仍然想打印周一 今天 的日期 然后下周重复这个过程 monday date dmonday Y m d last monday date d
  • PHP 文件大小报告旧大小

    以下代码是我编写的 PHP Web 服务的一部分 它需要一些上传的 Base64 数据 对其进行解码 然后将其附加到文件中 这一切都很好 问题是 当我在追加操作之后读取文件大小时 我得到了追加操作之前文件的大小 fileOut fopen
  • 我应该使用 htmlspecialchars 或 mysql_real_escape_string 或两者都使用[重复]

    这个问题在这里已经有答案了 我让用户输入一些信息 姓名 出生日期等 然后我必须将这些值插入数据库 我应该使用mysql real escape string http php net mysql real escape string防止 m
  • Codeigniter $this->db->reconnect();用法

    I m not自动加载数据库 因为我的应用程序的大多数页面don t需要数据库处理 否则整个事情会变慢 我想要做的是 当数据库已经存在时 不要建立与数据库的新连接 而是使用它而不是打扰服务器数据库 那么我该如何实施 this gt db g
  • 改进将字符串转换为可读的 url

    以下函数重写包含各种字符的新闻和产品标题的 url 我希望创建的字符串仅包含字母数字值和 但没有结尾 或空格 也没有重复的 下面的函数工作正常 但我想知道是否有任何方法可以将其编写得更简单或更有效 function urlName stri
  • SMTP:无法连接套接字:无法找到套接字传输“ssl”

    我一直在尝试在 WAMP 上使用 Pear 发送电子邮件通过 GMail 花了几个小时将其全部设置并找出我遇到的所有错误后 我以为我已经很接近了 直到我开始收到此错误 Failed to connect to ssl smtp gmail
  • 通过php变量的值设置输入字段的值

    我有一个简单的 php 计算器 代码是 h1 align center This is PHP Calculator h1
  • 如何使用 nohup 获取正在运行的程序列表

    我正在通过 SSH 连接访问运行 CentOS linux 发行版 的服务器 由于我无法始终保持登录状态 因此我使用 nohup command 来运行我的程序 我找不到如何获取我开始使用 nohup 的所有程序的列表 工作 只有在我注销之
  • 将 RequestBody json 转换为对象 - Spring Boot

    我是 java 开发的初学者 但之前有 PHP 和 Python 等编程语言的经验 对于如何进行 Spring Boot 的开发几乎没有什么困惑 我正在开发一个rest API 它有以下请求 key value key1 value1 pl
  • PHP strtotime +1 个月添加额外一个月[重复]

    这个问题在这里已经有答案了 我有一个简单的变量 可以将今天添加一个月 endOfCycle date Y m strtotime 1 month 今天是 2013 年 1 月 所以我希望返回 2013 02 但我得到的是 2013 03 我
  • 将屏幕宽度获取到 javascript 变量中并通过 ajax 将其发送到 php 页面以避免页面加载

    这是JS检测我的页面命名上的屏幕分辨率index html并将其发送到 php 以便可以使用以下方式检索值 GET 这是我的PHP文件命名的内容process php
  • 检查外部图像是否存在的正确 PHP 方法?

    我知道至少有 10 个相同的问题有答案 但似乎没有一个对我来说完美无缺 我正在尝试检查内部或外部图像是否存在 图像 URL 是否有效 fopen url r 失败 除非我使用 fopen Warning fopen http example
  • Symfony错误在链配置的命名空间XXX中找不到类XXX

    关于这个主题已经有一些其他问题 但没有一个真正有帮助 我是 Symfony 的新手 所以很难理解它 我在文件 Client IntranetBundle LDAP LDAPAuthenticationProvider php 中 此代码导致
  • 正则表达式提取大括号之间的文本

    我正在尝试提取 PHP 中花括号之间的文本 例如 欢迎 user first name 使用 site 版本 1 5 您的用户名 是 user username 您目前的声誉是 user reputation name 我用过 在某些情况下
  • 有没有办法重置特定类的所有静态属性?

    您可能知道 静态属性使测试变得困难 有没有办法将特定类的所有静态属性重置回其初始状态 理想情况下 这不需要为每个类定制代码 但可以通过继承以通用方式使用 或者完全从类外部使用 请不要回复 不要使用静态属性 之类的内容 谢谢 假设您正在使用
  • 如何使用 monolog ElasticSearchHandler 登录 Laravel 应用程序

    Monolog 包含弹性搜索处理程序和格式化程序 但它作为自定义通道对 Laravel 的实现并不像 Laravel 文档网站上描述的那么简单 以下是如何执行此操作的简要分步说明 为您的弹性搜索日志记录创建一个配置文件 config ela

随机推荐

  • TFS 2013:如何将变更集注释放入文本文件中?

    我想将所有变更集注释放入一个简单的文本文件中 以自动生成变更日志 我尝试通过在 SQL 中查询 TFS 表来做到这一点 但它是一个未记录的黑匣子 我读了一篇文章来运行这样的东西 tf history r 我获得了最新的 TFS 2013 电
  • 当Python请求库遇到重试限制时如何访问服务器响应

    我正在使用 Python requests 库来实现重试逻辑 这是我为重现我遇到的问题而制作的一个简单脚本 在重试次数用完的情况下 我希望能够记录来自服务器的至少一个响应以帮助调试 但是 我不清楚如何访问该信息 当然 我可以以其他方式实现重
  • 从图像列表加载和查看图像

    正如您所看到的 下面给出的代码不是很有用 是否可以缩短代码 鼠标滚轮向后和向前给出相同的结果 下图 无法配置 Keydown Private Sub Images Load ByVal sender As System Object ByV
  • nodeJS util.format 传递数组

    我正在使用 util format 来格式化字符串 如下所示 util format My name is s s John Smith 事实上 第二个参数是一个数组 John Smith 阻止我的代码替换第二个 s 但我需要它是一个数组
  • 为什么使用 MySQL 时带有“exists”的 sql 运行速度比“in”慢

    我是 MySQL 优化的新手 我发现了一个惊人的事情 使用 exists 的 sql 比使用 in 运行得慢 以下是我的 DDL mysql gt show create table order G 1 row Table order Cr
  • Spring批处理:在侦听器中获取ExecutionContext

    我是 Spring 批次的新手 我需要计算读取 写入和出错的元素 我定义了这样的步骤 Bean public Step stepMain StepBuilderFactory stepBuilderFactory return stepBu
  • Python - Gspread 请求错误 401

    我目前正在制作一个连接到 Google 电子表格 gspread 的 Discord 机器人 但在我运行它一段时间后 它开始发出错误 并且无法再连接到我的 gspread 除非我重新启动它 我收到的错误 https hastebin com
  • 页面方法和会话

    我已经四处寻找这个解决方案 任何见解都将受到高度赞赏 情况 当单个页面中有多个 PageMethod 调用时 每个方法调用都会持有 Session 对象的锁 从而导致阻塞 PageMethod 调用只能异步进行 Page指令转向False
  • 如何在 MVC 视图中使用 jquery/ajax 验证空格

    我有一个包含表单的 MVC 视图 现在需要验证在特定文本字段中输入的数据 我只需要确保没有空格 在我看来 有人可以给我一个使用 jquery ajax 脚本进行表单验证的示例吗 将验证构建到视图模型的一部分可能是个好主意 这样您的模型中就会
  • DBIx:带有附加属性的类多对多关系

    我正在 Catalyst 框架中使用 DBIx Class 我的本地目标是在用户和任务之间添加新的多对多关系 但我需要一个小技巧 用户可以在任务中扮演不同的角色 例如 工人 或 旁观者 所以我有users包含这些字段的表 id name I
  • AFNetworking:重试操作时访问完成处理程序

    给出一些上下文 我正在尝试为身份验证错误实现一个全局错误处理程序 使用令牌身份验证 而不是基本身份验证 它应该尝试重新身份验证 然后重复原始失败的请求 请参阅我之前的问题 AFNetworking 全局处理错误并重复请求 https sta
  • 在 Spring Boot 中使用 @TestPropertySource 覆盖 @PropertySource

    我有我的 Spring Boot 主类 SpringBootApplication PropertySource file my file properties public class Application extends Spring
  • 如何列出远程SVN存储库中的所有文件?

    我访问一个large远程 SVN 存储库 由于我通常只需要其内容的一小部分 因此我进行了 稀疏结帐 svn checkout depth empty svn ssh src 每当我需要存储库中的文件夹时 我都可以这样做 svn up fol
  • Angular 2默认选中单选按钮

    我正在尝试检查默认值为零的单选按钮 我正在尝试使用 checked true 属性 但这是行不通的
  • Swift 可重用 UITextFieldDelegate

    我正在尝试实现一个可重用的UITextFieldDelegate类如下 class CustomTextFieldDelegate NSObject UITextFieldDelegate 所有委托协议方法均已正确实现 In the con
  • Node.js:如何序列化/反序列化 React 组件?

    我想序列化一个 React 元素 给定 props 的 React 组件的实例 并在其他地方反序列化它 你为什么问 我希望能够通过标准输出从一个进程发送该类 并在另一个进程中渲染它 我还希望渲染的组件是交互式的 所以只需使用ReactDOM
  • CSS 网格布局使用 javascript 改变列宽

    我尝试设置 CSS 网格布局如下 wrapper width 800px display grid grid template columns repeat 3 200px grid template rows repeat 5 200px
  • 如何在itextsharp文档中并行设置两个表?

    How can I set two tables parallelly in a document 我的生成 pdf 的示例代码是 Document doc new Document new Rectangle 288f 144f 10 1
  • 我可以确定查询是否找不到任何值在指定范围内的子项吗?

    我能以某种方式确定是否没有孩子ref存在于之间的值 1 and newTotal 这就是我希望能起作用的 如果查询中存在子项 则回调将运行 ref orderByValue startAt 1 endAt newTotal limitToL
  • 如何在 PHP Linux 中访问 .mdb 数据源?

    我刚刚安装unixODBC为了访问我的 mdb 数据源PHP 5 3 CentOS 6 10使用这个命令 yum install unixODBC 在 Windows 中我可以简单地取消注释extension php pdo odbc dl