PDO多个MYSQL语句执行和错误日志文件

时间:2013-10-03 12:15:58

标签: mysql pdo php-5.3

需要执行一组PDO MYSQl查询,在事务开始后出现任何故障无法捕获任何异常。即使我给表名错了。 例如

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); 
}
}
}

任何想法???

1 个答案:

答案 0 :(得分:0)

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

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

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

    因此,请改为:

    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $dbh->beginTransaction();
    
  2. 您为UPDATE PDOStatement对象$update_pre命名,但随后尝试在execute()上调用$code_pre方法:

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

    因此,请改为:

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

        $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'";
    

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

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

        dbh->commit
    

    因此,请改为:

        $dbh->commit();