使用事务的PHP PDO插入不显示错误

时间:2014-07-02 23:33:54

标签: php sql postgresql pdo transactions

我有这段代码:

$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语句,因此我正在使用事务。

有人知道如何解决这个问题吗?

1 个答案:

答案 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();