需要执行一组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);
}
}
}
任何想法???
答案 0 :(得分:0)
您的代码包含一些语法错误,导致PHP无法解析它。
调用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();
您为UPDATE
PDOStatement对象$update_pre
命名,但随后尝试在execute()
上调用$code_pre
方法:
$update_pre = $dbh->prepare($update);
$code_pre->execute();
因此,请改为:
$update_pre = $dbh->prepare($update);
$update_pre->execute();
您错误地引用了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查询。
在尝试提交事务时,您省略了$
变量标识符(来自对dbh
对象的引用),方法调用的()
参数括号和;
语句终止符:
dbh->commit
因此,请改为:
$dbh->commit();