从ADODB迁移到PDO

时间:2012-12-02 02:43:18

标签: pdo prepared-statement adodb

我有一个数据库查询,它使用带有未命名占位符的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。感谢。

1 个答案:

答案 0 :(得分:0)

我自己发现错误:

$dbo->lastInsertId();

应该是

$dbh->lastInsertId();

它现在完美运作。