如果我要做以下事情:
$pds= $pdo->prepare("SELECT * FROM userinfo WHERE username=:username AND password=:password");
$pds->execute(array(':username' => $username, ':password' => $password));
$row = $pds->fetch(PDO::FETCH_ASSOC);
我是否需要对每个执行的命令执行try {},或者尝试使用单个catch块覆盖整个代码?
谢谢!
答案 0 :(得分:5)
我是否需要为每个执行的命令设置一个try {},否则try块会覆盖整个代码,
以下是现实生活中的一组正确的规则:
虽然你可以省略后者,因为PHP内置的基本处理程序比没经验的程序员可以开发的程序更好。
答案 1 :(得分:0)
try块将无法捕获生成的第一个异常。因此,将所有3个语句放在try部分中是非常安全的。
您还可以使用多个catch块,以便可以以不同方式处理不同的异常类型,例如:
try {
$pds= $pdo->prepare("SELECT * FROM userinfo WHERE username=:username AND password=:password");
$pds->execute(array(':username' => $username, ':password' => $password));
$row = $pds->fetch(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
echo 'A pdo exception happened';
} catch (Exception $e) {
echo 'A different exception happened';
}
这有助于确保您可以在问题发生后进行清理。
答案 2 :(得分:0)
您要执行的查询需要做的是:
try{
$pds= $pdo->prepare("SELECT * FROM userinfo WHERE username=:username AND password=:password");
$pds->execute(array(':username' => $username, ':password' => $password));
}
catch(PDOException $ex){
die("Failed to run query: " . $ex->getMessage());
//Or Echo, or store in a variable to process if you don't want to die()
}
$row = $pds->fetch(PDO::FETCH_ASSOC);
希望这有帮助!
编辑: 此外,如果您需要更多的分离和可读性来构建查询,您可以尝试创建查询参数数组,而不是直接在execute()函数中创建数组。
$pds = $pdo->prepare("SELECT * FROM userinfo WHERE username=:username AND password=:password");
$query_params = array(
':username' => $username,
':password' => $password
);
$result = $pds->execute($query_params);
答案 3 :(得分:-1)
你一定要学习错误处理。此外,在发布此类问题之前,您应该做一些研究(至少在stackoverflow上)。
您可以将该代码放在一个try块中。
try
{
$pds= $pdo->prepare("SELECT * FROM userinfo WHERE username=:username AND password=:password");
$pds->execute(array(':username' => $username, ':password' => $password));
$row = $pds->fetch(PDO::FETCH_ASSOC);
}
catch(Exception $ex)
{
}
答案 4 :(得分:-1)
您只需在所有代码周围放置try{}
块,并使用单个catch{}
块捕获它。
有关详细信息,请参阅php manual。
答案 5 :(得分:-1)
由于所有方法都可能抛出相同的异常:PDOException
,因此将每个调用包装为自己的try/catch
块是有意义的。是的,如果你需要做出反应,这取决于抛出异常的方法,而不是解析异常的errorInfo
和/或errorCode
(这将是驱动程序依赖)
答案 6 :(得分:-1)
一个try / catch块意味着,如果你在第一个语句中得到异常,那么剩下的就不会被执行,这在你的情况下很明显。
将来如果你有不同的情况,你的选择也会有所不同。