0

我有一个数据库查询,它使用带有未命名占位符的 ADODB 将数据插入数据库,我正在尝试将其转换为使用 PDO,但我收到一个错误,这可能是由于我正在使用的语法。

我正在尝试什么:

在包含的文件中,我具有以下共享功能:

function insCOA($data) {

    global $dbh;

    try {
        $sth=$dbh->prepare("
        INSERT INTO
            coa
            (
                nom_code,
                acc_title,
                acc_type_id,
                acc_desc
            ) VALUES (
                ?,
                ?,
                ?,
                ?
            )
        ");

        for ($i = 0; $i < count($data); $i++) {
            $sth->execute($data[$i]);
            $last_insert_id = $dbo->lastInsertId();
        }
    }

    catch(PDOException $e) {
        echo "Something went wrong. Please report this error.";
        file_put_contents('/PDOErrors.txt', $e->getMessage(), FILE_APPEND);
    }
    return $last_insert_id;
}

在我的 PHP 页面中,我有以下内容:

// Add to coa table
$data = array(
    array(
        $nom_code,              /* nom_code         */
        $acc_title,             /* acc_title        */
        $acc_type_id,           /* acc_type_id      */
        $acc_desc               /* acc_desc         */
    )
);
$coa_id = insCOA($data);

连接在其他地方处理并且连接正常。它以 $dbh 的形式在全局中导出。

我得到的错误是

致命错误:在第 574 行的 /common.funcs.php 中的非对象上调用成员函数 lastInsertId()(这是上面对 lastInsertId() 的引用。

原来在使用ADODB时,共享函数如下:

共享功能:

function insCOA($data) {

    global $conn;

    $sql    = "
        INSERT INTO
            coa
            (
                nom_code,
                acc_title,
                acc_type_id,
                acc_desc
            ) VALUES (
                ?,
                ?,
                ?,
                ?
            )
    ";

    for ($i = 0; $i < count($data); $i++) {
        if ($conn->Execute($sql,$data[$i]) === false) {
            print 'error' . $conn->ErrorMsg() . '<br />Query: ' . $sql;
        } else {
            $last_insert_id = $conn->Insert_ID();
        }
    }
    return $last_insert_id;
}

在 PHP 页面中没有任何改变。

一旦我完成了这项工作,我将能够转换一堆其他查询,因此解决这个问题将非常有用。这是我第一次尝试使用 PDO。谢谢。

4

1 回答 1

0

自己发现错误是:

$dbo->lastInsertId();

应该

$dbh->lastInsertId();

它现在运行良好。

于 2012-12-02T05:56:30.533 回答