在PDO中,我可以exec()一个字符串,但不是prepare()然后执行()它

use*_*152 2 php pdo exec prepare

如果我PDO::exec()是一个查询,它的工作原理.然而,当我尝试先PDO::prepare() 那么 PDO::execute(),它工作.为什么?

例如,这可以按预期工作:

$db->exec($string);
Run Code Online (Sandbox Code Playgroud)

但是,这不是:

$stmt = $db->prepare($string);
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)

没有抛出任何错误,并且$db->errorInfo显示全部为零,意味着成功.

这绝对是对我有意义的.

编辑上下文:

注意,newDB()这只是一个使用我需要的设置启动数据库的功能.

当我运行以下内容时,它按预期工作:

$db = newDB();

if (!$error) {
    if (isset($id)) {
        try {
            $db->exec('UPDATE Events SET Title = "WHY" , Date = "2012-11-01 00:00:00", Place = "no", Description = "no", UDate = now() WHERE Id = "12"');
        } catch(PDOException $e) {
            $error = 1;
        }
    }
}

$db = null;
Run Code Online (Sandbox Code Playgroud)

但是,这不是,我不知道为什么:

$db = newDB();

if (!$error) {
    if (isset($id)) {    
        try {
            $stmt = $db->prepare('UPDATE Events SET Title = "WHY" , Date = "2012-11-01 00:00:00", Place = "no", Description = "no", UDate = now() WHERE Id = "12"');
            $stmt->execute();
        } catch(PDOException $e){
            $error = 1;
        }
    }
}

$db = null;
Run Code Online (Sandbox Code Playgroud)

xda*_*azz 5

你设置了异常模式吗?

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Run Code Online (Sandbox Code Playgroud)