0

需要执行一组 PDO MYSQl 查询,以防我的事务开始后出现任何故障 Unable to catch any exception 。即使我给表名错误。例如

class user extends PDO
{
function empid()
{
$dbh->beginTransaction();
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)

try
{
    $update= "update user set data=1 where user_id = 11";
    $update_pre = $dbh->prepare($update);
    $code_pre->execute();

    $insert="insert into user set user name="jesi",age='22';
    $insert_pre = $dbh->prepare($insert);
    $insert_pre->execute();
    dbh->commit

}
catch(Exception $e)
{
$dbh->rollBack();

file_put_contents('mylog.txt', $e->getMessage(), FILE_APPEND); 
}
}
}

有任何想法吗 ???

4

1 回答 1

0

您的代码包含一些语法错误,这将导致 PHP 无法解析它。

  1. ;在调用PDO::beginTransaction();后缺少语句终止符 另外,我认为必须PDO::setAttribute()在使用 PDO 对象之前调用(在这种情况下,在调用之前):

    $dbh->beginTransaction();
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)
    

    因此,改为:

    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $dbh->beginTransaction();
    
  2. 您命名UPDATEPDOStatement 对象$update_pre,然后尝试在以下位置调用该execute()方法$code_pre

        $update_pre = $dbh->prepare($update);
        $code_pre->execute();
    

    因此,改为:

        $update_pre = $dbh->prepare($update);
        $update_pre->execute();
    
  3. 您错误地引用了 SQL 中的嵌套字符串文字INSERT

        $insert="insert into user set user name="jesi",age='22';
        //  this double quote ends the string --^
        //  and everything thereafter is unparseable
    

    因此,改为:

        $insert="insert into user set user name='jesi',age='22'";
    

    注意:通常不应将数字文字引用为字符串;此外,如果要从应用程序变量中替换这些文字,则应该使用参数化查询。

  4. 在尝试提交事务时,您省略了$变量标识符(来自对dbh对象的引用)、()方法调用的参数括号和;语句终止符:

        dbh->commit
    

    因此,改为:

        $dbh->commit();
    
于 2013-10-03T13:00:12.127 回答