使用 ODBC 连接到数据库会导致警告并且不打印任何内容

Posted

技术标签:

【中文标题】使用 ODBC 连接到数据库会导致警告并且不打印任何内容【英文标题】:Connecting to database with ODBC results in warnings and nothing printed 【发布时间】:2013-06-12 17:46:02 【问题描述】:

我正在尝试将 ODBC 与 php 一起使用,但我似乎遇到了一些问题。这是我的代码:

<?php
    $connect = odbc_connect("digitallibrary", "root", "");
    $sql = "SELECT name FROM books";
    $result = odbc_exec($connect, $sql);
    echo $result;

    while (odbc_fetch_row($result)) 
        $name = odbc_result($result, "name");
        print("$name\n");
    
    odbc_close($connect);
    ?>

我还安装了 mysql odbc 连接器并添加了这个系统 DSN: 数据源名称:数字图书馆 TCP/IP 服务器:本地主机端口 80 用户:根 数据库:数字图书馆

当我运行我的代码时,我收到了这个警告,但没有打印出来:

警告:odbc_connect(): SQL 错误:[Microsoft][ODBC Driver Manager] 指定的 DSN 包含驱动程序和应用程序之间的体系结构不匹配,E:\Program Files\xampp\htdocs\DigitalLibrary 中 SQLConnect 中的 SQL 状态 IM014 \index.php 第 9 行

警告:odbc_exec() 期望参数 1 是资源,给定的布尔值 在第 11 行的 E:\Program Files\xampp\htdocs\DigitalLibrary\index.php 中

警告:odbc_fetch_row() 期望参数 1 为资源,null 在 E:\Program Files\xampp\htdocs\DigitalLibrary\index.php 中给出 第 14 行

警告:odbc_close() 期望参数 1 是资源,布尔值 在 E:\Program Files\xampp\htdocs\DigitalLibrary\index.php 中给出 第 18 行

我做错了什么?

【问题讨论】:

【参考方案1】:

现在,您正尝试将 64 位应用程序与 32 位 ODBC 驱动程序一起使用,反之亦然。您应该检查您使用的是 64 位还是 32 位的 PHP 应用程序。之后,您必须启动正确的 ODBC 管理员。有32 bit64 bit两种类型。

如果您使用的是 64 位 ODBC 管理员:它在管理工具、控制面板中

如果您使用的是 32 位 ODBC 管理员:您应该进入路径 %windir\syswow64\odbcad32.exe.

当您设置了正确的 ODBC 管理员时。您还需要创建系统 DSN。如果您在管理员中找不到 MS Access 驱动程序,则需要为该架构下载一个。

EDIT:你可以从here下载32位

希望这会有所帮助。

【讨论】:

更高版本的 Windows 在控制面板/管理工具中同时拥有 64 位和 32 位数据源管理员。 64 位和 32 位 odbc 驱动程序能否在同一台服务器上同时运行?我们有一个 Win Server 2008 R2。 如果我将另一个 ODBC 驱动程序(一个 32 位版本来满足我的 32 位应用程序)添加到具有现有 64 位版本的服务器(其他一些应用程序可能使用 64 位),会有问题吗?它不会与其他应用程序产生冲突吗?我担心如果我安装 32 位版本可能会影响服务器上现有和正在运行的应用程序

以上是关于使用 ODBC 连接到数据库会导致警告并且不打印任何内容的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP 和使用 Unixodbc 连接到 MS Access db

不使用 ODBC 将 Python 连接到 SQL Server

如何使用映射的网络驱动器通过数据源 (ODBC) 连接到 Access 数据库?

通过ODBC将Excel连接到PostgreSQL

ODBC 连接到 MySQL 数据库有啥影响

如何使用 ASP.Net 数据源通过 ODBC DSN 连接到 Access 数据库?