【问题标题】:How to connect PHP with Microsoft Access database如何将 PHP 与 Microsoft Access 数据库连接起来
【发布时间】:2013-11-17 09:28:41
【问题描述】:

我目前面临一个新的挑战,即开发一个使用 Microsoft Access 作为主数据库而不是 mysql 的站点。我以前没有使用过 MS Access,我想知道如何去做,我在W3schools 上查找了 w3c 网站,但代码给出了错误

警告:odbc_connect() [function.odbc-connect]:SQL 错误:[Microsoft][ODBC Driver Manager] 未找到数据源名称且未指定默认驱动程序,C:\Users\NNALI 中 SQLConnect 中的 SQL 状态 IM002 \Desktop\root\test.php 在第 2 行

还有这个错误

警告:odbc_exec() 期望参数 1 是资源,布尔值在第 4 行的 C:\Users\NNALI\Desktop\Breweries\root\test.php 中给出

我被卡住了,不知道该怎么办,我将不胜感激所有帮助。

<?php
    $conc = odbc_connect("northwind", "","");
    $sql  = "Select * From customers";
    $rs   = odbc_exec($conn, $sql);
?>

以上是我使用的代码

【问题讨论】:

  • 不要将 w3c 与 w3schools 混淆 - 它们是完全不同的东西。另外 - 显示您当前拥有的代码。看起来 PHP 找不到数据库。
  • 谢谢,我添加了代码
  • 一个更简单的解决方案是忽略“要求”并将数据库导出为 CSV 并将其导入 MySQL。我意识到这不是问题,但是 PHP 本身处理 CSV 文件(例如 fgetcsv()),而 Access 是一个非常烦人的数据库。此外,微软早在 2010 年就停止支持他们的 Access ODBC 驱动程序。
  • “Microsoft 早在 2010 年就停止支持他们的 Access ODBC 驱动程序” - 这根本不是真的。较新的 Access 数据库引擎(又名“ACE”)-Microsoft Access Driver (*.mdb, *.accdb) 随附的 ODBC 驱动程序是受支持的产品。
  • 我已经安装了 64 位 Xampp、64 位 php、64 位 odbc 驱动程序并正在尝试使用 accdb。它不起作用,原因是什么? phpinfo 显示 ODBC 库 Win32 所以问题是当使用 64 位代码时,当我们需要 64 用于 accdb 时,它仍然加载 32 位 ODBC 驱动程序......

标签: php ms-access odbc


【解决方案1】:

如果您在 XAMPP 环境中遇到连接问题,我建议取消注释 php.ini 文件中的以下条目。

extension = odbc

没有它我收到一个错误:Uncaught pdoexception: could not find driver

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

      如果您刚刚开始一个新项目,那么我建议您使用 PDO 而不是旧的odbc_exec() 方法。这是一个简单的例子:

      <?php
      $bits = 8 * PHP_INT_SIZE;
      echo "(Info: This script is running as $bits-bit.)\r\n\r\n";
      
      $connStr = 
              'odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};' .
              'Dbq=C:\\Users\\Gord\\Desktop\\foo.accdb;';
      
      $dbh = new PDO($connStr);
      $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      
      $sql = 
              "SELECT AgentName FROM Agents " .
              "WHERE ID < ? AND AgentName <> ?";
      $sth = $dbh->prepare($sql);
      
      // query parameter value(s)
      $params = array(
              5,
              'Homer'
              );
      
      $sth->execute($params);
      
      while ($row = $sth->fetch()) {
          echo $row['AgentName'] . "\r\n";
      }
      

      注意:如果您不需要需要支持U+00FF 以上的Unicode 字符,上述方法就足够了。如果您确实需要支持这些字符,那么PDO_ODBC 和旧的odbc_ 函数都将不起作用;您需要使用this answer 中描述的解决方案。

      【讨论】:

      • 我看到了问题,我使用的是 USBwebserver,它没有包含 pdo 扩展,所以它没有运行,我认为是问题
      • USBWebserver 8.6 默认启用 PDO,但仅适用于 mysql, pgsql, sqlite。尝试进入settings\php.ini 并取消注释;extension=php_pdo_odbc.dll 行,然后重新启动USBWebserver。
      • 那么为什么不升级到8.6呢?免费。 (另外,我刚刚尝试了 8.5,它的 PDO_ODBC 支持被破坏了。它在 8.6 中运行良好。)
      • 抱歉,USBwebserver 的 apache 拒绝上线,我不知道是什么问题,我从昨天开始一直在解决这个问题,希望您能提供任何帮助,谢谢
      • @GeorgeJames Strange,8.6 对我来说完美无缺:我下载了它,我解压了它,我运行了它,它成功了。您收到任何错误消息吗?日志文件或 Windows 事件查看器中是否显示任何内容?
      【解决方案4】:

      问题是一个简单的错字。您在第 2 行将变量命名为“conc”,但在第 4 行引用了“conn”。

      【讨论】:

        【解决方案5】:
        <?php
            $dbName = $_SERVER["DOCUMENT_ROOT"] . "products\products.mdb";
            if (!file_exists($dbName)) {
               die("Could not find database file.");
            }
            $db = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$dbName; Uid=; Pwd=;");
        

        成功的连接将允许从 PHP 执行 SQL 命令来读取或写入数据库。但是,如果您收到错误消息“PDOException 找不到驱动程序”,则可能是未安装 PDO ODBC 驱动程序。使用 phpinfo() 函数检查您的安装是否引用了 PDO。

        如果不存在 PDO ODBC 条目,您将需要确保您的安装包含 PDO 扩展和 ODBC 驱动程序。要在 Windows 上执行此操作,请取消注释 php.ini 中的 extension=php_pdo_odbc.dll 行,重新启动 Apache,然后再次尝试连接到数据库。

        安装驱动后,phpinfo() 的输出应该包含如下信息:https://www.diigo.com/item/image/5kc39/hdse

        【讨论】:

          【解决方案6】:

          您确定 odbc 连接器创建良好吗? 如果没有,请再次检查“创建 ODBC 连接”步骤

          编辑没有 DSN 的连接来自 php.net

          //微软访问

          $connection = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=$mdbFilename", $user, $password);
          

          在你的情况下,如果你的文件名是北风和你的文件扩展名 mdb:

          $connection = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=northwind", "", "");
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-12-08
            • 1970-01-01
            • 2022-11-22
            • 2015-06-18
            • 1970-01-01
            • 1970-01-01
            • 2012-12-11
            • 2011-07-07
            相关资源
            最近更新 更多