【问题标题】:PDO error when trying to insert to iSeries DB2 with php on Linux尝试在 Linux 上使用 php 插入 iSeries DB2 时出现 PDO 错误
【发布时间】:2018-02-07 02:14:13
【问题描述】:

我在尝试通过 PDO odbc 将插入语句通过 php 运行到 iSeries DB2 时遇到问题。

以下是我的php脚本:

<?php

$empl_number  = $argv[1];
$empl_estatus = $argv[2];
$empl_lname   = $argv[3];
$empl_fname   = $argv[4];
$empl_user    = $argv[5];

try {

    $sql = "INSERT INTO `USER_PROFILE_AD` (`EMPLOYEE_NUMBER`, `EMPLOYEE_STATUS`, `LAST_NAME`, `FIRST_NAME`, `LDAP_RDN`, `ACTIVE`, `USER_PROFILE`) VALUES (:numb, :stat, :lname, :fname, :usern, :active, :profile)";
    $conn = new PDO("odbc:AS400TST");
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $conn->prepare($sql);

    $stmt->bindParam(':numb', $empl_number, PDO::PARAM_INT);
    $stmt->bindParam(':stat', $empl_estatus, PDO::PARAM_STR);
    $stmt->bindParam(':lname', $empl_lname, PDO::PARAM_STR);
    $stmt->bindParam(':fname', $empl_fname, PDO::PARAM_STR);
    $stmt->bindParam(':usern', $empl_user, PDO::PARAM_STR);
    $stmt->bindParam(':active', 0, PDO::PARAM_INT);
    $stmt->bindParam(':profile', NULL, PDO::PARAM_NULL);
    $stmt->execute();

} catch (PDOException $e) {
    echo $e->getMessage();
}

?>

当我通过命令行运行脚本时...

user@server: /usr/bin/php myscript.php 1234 AC DOE JOHN JOHN.DOE

我收到以下错误消息:

SQLSTATE[42000]: Syntax error or access violation: 0 [IBM][System i Access ODBC Driver]Statement violates access rule: Connection is set to read only. (SQLPrepare[0] at /builddir/build/BUILD/php-5.4.16/ext/pdo_odbc/odbc_driver.c:206)

我与 iSeries 开发人员进行了仔细检查,并且我使用的用户名确实可以完全访问数据库/表/等...

请您帮我看看为什么插入不起作用?

注意事项:

  • 连接正常。

  • “选择”语句可以正常工作。

  • 在 /etc/odbc.ini 中,CommitMode = 2

提前致谢,

EGMWEB

【问题讨论】:

    标签: php linux pdo odbc ibm-midrange


    【解决方案1】:

    根据我的研究,此错误通常是由升级或应用于 IBM i 操作系统的 PTF 引起的。解决方法是获取当前的 ODBC 驱动程序。您的管理员应该能够提供帮助。

    【讨论】:

    • jmarkmurphy,感谢您的回复。我将与我们的 iSeries 管理员核实。
    【解决方案2】:

    我找到了解决办法——

    如果其他人遇到此问题,供您参考...

    以下文章: https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_71/rzatv/rzatvodbcman.htm

    解释要在 odbc.ini 中完成的设置

    ...

    DefaultLibraries = QGPL
    Database =
    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
    

    ... 请记住为您的两个参数更改“QGPL”

    我调整了参数并让它工作。

    谢谢大家!!

    EGMWEB

    【讨论】:

      【解决方案3】:

      如果选择工作,则不会记录该表。您必须开始记录表才能添加更改删除工作。 ACD 不起作用。

      在 as400 上。

      STRJRNPF ...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-02
        • 1970-01-01
        • 1970-01-01
        • 2014-11-21
        • 1970-01-01
        • 2023-03-07
        • 2015-07-13
        • 2023-03-06
        相关资源
        最近更新 更多