我有一个数据库查询,它使用带有未命名占位符的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。感谢。
答案 0 :(得分:0)
我自己发现错误:
$dbo->lastInsertId();
应该是
$dbh->lastInsertId();
它现在完美运作。