【问题标题】:Successfully connect to DB2 using PHP NOT using ODBC?使用 PHP 不使用 ODBC 成功连接到 DB2?
【发布时间】:2016-03-01 22:20:25
【问题描述】:

需要知道 1) 是否有人成功建立了连接,2) 是否使用 PHP 查询了远程 DB2 服务器,以及 3) 如果是,如何?

我为 db2 安装了 PECL 扩展

[db2] extension=ibm_db2.so

但不知道如何使用它。我发现的所有示例都使用 ODBC 样式的 dsn,我不想使用 ODBC。

更新:根据此处的文档 (http://www.redbooks.ibm.com/abstracts/sg247218.html),名义上可以使用 ibm_db2 驱动程序(无 ODBC),但其中描述的方法不完整或已过时。

【问题讨论】:

    标签: php db2


    【解决方案1】:

    使用 PHP 你只有一个选项:ODBC。

    以下是关于如何在 Ubuntu 上连接到 DB2 for i(在 IBM i 上)的分步说明:

    从 IBM 下载免费的 iSeriesAccess-6.1.0-1.2.i386.rpm 文件(您必须创建一个免费帐户才能获得它)

    将 RPM 文件转换为 Ubuntu 可以理解的内容:sudo alien iSeriesAccess-6.1.0-1.2.i386.rpm

    安装生成的 .deb:sudo dpkg -i iseriesaccess_6.1.0-2.2_i386.deb

    将安装的 iSeries 库复制到 Ubuntu 期望它们的位置:sudo cp /opt/ibm/iSeriesAccess/lib/* /usr/lib

    编辑 /etc/odbc.ini 文件以包含:

    [primary]
    Description             = primary
    Driver                  = iSeries Access ODBC Driver
    System                  = IP_ADDRESS
    UserID                  = USERNAME
    Password                = PASSWORD
    Naming                  = 0
    DefaultLibraries        = QGPL
    Database                = XXXXXXXXXX
    ConnectionType          = 0
    CommitMode              = 2
    ExtendedDynamic         = 0
    DefaultPkgLibrary       = QGPL
    DefaultPackage          = A/DEFAULT(IBM),2,0,1,0,512
    AllowDataCompression    = 1
    LibraryView             = 0
    AllowUnsupportedChar    = 0
    ForceTranslation        = 0
    Trace                   = 0
    

    编辑 /etc/odbcinst.ini 文件以包含:

    [iSeries Access ODBC Driver]
    Description     = iSeries Access for Linux ODBC Driver
    Driver          = /usr/lib/libcwbodbc.so
    Setup           = /usr/lib/libcwbodbcs.so
    NOTE1           = If using unixODBC 2.2.11 or later and you want the 32 and 64-bit ODBC drivers to share DSN's,
    NOTE2           = the following Driver64/Setup64 keywords will provide that support.
    Driver64        = /usr/lib/lib64/libcwbodbc.so
    Setup64         = /usr/lib/lib64/libcwbodbcs.so
    Threading       = 2
    DontDLClose     = 1
    UsageCount      = 1
    

    然后创建与 PDO 的连接:

    $pdo = new PDO("odbc:DRIVER={iSeries Access ODBC Driver};SYSTEM=$server;PROTOCOL=TCPIP", $username, $password);
    

    【讨论】:

    • 您可能应该指出这个答案适用于 DB2 i (AS/400) 但不适用于其他 DB2 服务器,不是吗?
    • 非常好@mustaccio - 感谢您指出这一点。我编辑了我的帖子,以反映我的说明是特定于 DB2 for i 而不是 DB2 for LUW。
    • 很抱歉挖出了这个旧线程。但是在使用 unixODBC 和 iSeries DB2 时,我偶然发现了我的 UTF8 数据上的一些垃圾。您应该在 odbc.ini 中添加另一行:DEBUG = 65536 - 请参阅ibm.com/developerworks/community/forums/html/…
    【解决方案2】:

    对于 DB2 LUW,您至少需要为 ODBC 和 CLI from here 安装适当版本的 DB2 数据服务器驱动程序。它提供 PHP 模块使用的所需库。

    【讨论】:

    • 这是满足编译 PECL 扩展的要求的一部分。
    【解决方案3】:

    您可以使用 pecl ibm_db2 扩展。它使用 DB2 调用级接口 (DB2 CLI),因此您必须在系统中安装 IBM db2 CLI。

    这是 PHP 文档页面:

    http://php.net/manual/pt_BR/intro.ibm-db2.php

    【讨论】:

      猜你喜欢
      • 2012-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多