我有这段代码:
$Pdo = new PDO('pgsql:host=localhost;port=5432;dbname=mydb', 'user', 'password');
$options = = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY,
PDO::ATTR_EMULATE_PREPARES => false
);
$sql = 'INSERT INTO my_table (
field_a,
field_b
) VALUES (
:field_a,
:field_b
)';
$Pdo->beginTransaction();
$Ps = $Pdo->prepare($sql, $options);
$Ps->execute(array(
':field_a' => 'Field A',
':field_b' => 'Field B',
':field_c' => 'Field C'
));
$Pdo->commit();
$Ps-execute()
返回false
,但没有显示错误消息,告知列中的列多于指定的SQL。
在我的实际案例中,我有多个SQL语句,因此我正在使用事务。
有人知道如何解决这个问题吗?
答案 0 :(得分:0)
目前,我找到的唯一解决方案是:
$Pdo->beginTransaction();
$Ps = $Pdo->prepare($sql, $options);
if( ! $Ps->execute(array(
':field_a' => 'Field A',
':field_b' => 'Field B',
':field_c' => 'Field C'
))){
throw new Exception('Transaction failed: ' . implode(' | ', $Ps->errorInfo()));
}
$Pdo->commit();