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 に答える