名前のないプレースホルダーを持つ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を使用する最初の試みです。ありがとう。