Php 插入PDO。我应该用try…catch吗?
我刚开始使用PDO,我有这个代码在我的表中插入值Php 插入PDO。我应该用try…catch吗?,php,mysql,pdo,Php,Mysql,Pdo,我刚开始使用PDO,我有这个代码在我的表中插入值 $dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password); $sql = "INSERT INTO lists (ID, Title, Timestamp, Plays, Likes) VALUES (:ID, :Title, :Timestamp, :Plays, :Likes)"; $q = $dbh->prepare($sql); $q
$dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
$sql = "INSERT INTO lists (ID, Title, Timestamp, Plays, Likes)
VALUES (:ID, :Title, :Timestamp, :Plays, :Likes)";
$q = $dbh->prepare($sql);
$q->execute(array(':ID'=>$list[$i]["id"],
':Title'=>$list[$i]["title"],
':Timestamp'=>$list[$i]["timestamp"],
':Plays'=>$list[$i]["playcount"],
':Likes'=>$list[$i]["likes"]));
通过阅读论坛,我了解到有时出于安全原因,我需要使用try…catch。我真的很困惑…在我的情况下,为了使用try…catch,我应该改变什么吗
非常感谢 很抱歉删除,在完成之前意外点击了post。以下是使用PDO时实现错误报告的一种方法:
try {
if($dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password)) {
// Set Errorhandling to Exception instead of PDO error reporting
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} else {
throw new Exception(": Connection Error ");
}
...later in code block
$sql = "INSERT INTO lists (ID, Title, Timestamp, Plays, Likes)
VALUES (:ID, :Title, :Timestamp, :Plays, :Likes)";
if($q = $dbh->prepare($sql)) {
$q->execute(array(':ID'=>$list[$i]["id"],
':Title'=>$list[$i]["title"],
':Timestamp'=>$list[$i]["timestamp"],
':Plays'=>$list[$i]["playcount"],
':Likes'=>$list[$i]["likes"]));
}else {
throw new Exception(“: Error on Insert “);
}
//now catch all throw errors
} catch(Exception $e){
$mes = $date.": bdh errors ";
$mes .= $e->getMessage();
//send errors to system error reporting
error_log($mes);
}
有关PDO错误驱动程序的更多信息,请查看“出于安全原因”--出于什么原因的“安全”?我以为是为了错误处理?因为我读到“如果你的应用程序没有捕捉到PDO构造函数抛出的异常,那么默认操作是终止脚本并显示一个回溯跟踪。这个回溯跟踪可能会显示完整的数据库连接详细信息。”我们不知道你的应用程序是如何构建的。您可能有一个全局try-catch来处理所有异常。如果你同意的话,这可能是一个解决方案it@CharleyB0y或者,如果应用程序终止时出现查询的未捕获异常,您也可以这样做。但是您肯定需要以某种方式捕获PDO构造函数。@CharleyB0y通常您的查询将与构造函数分离,因为您将在其中包含其他代码。在try/catch块中包装数百行可能不是很好的做法。关于这一点,请参见zerkms关于全局异常处理程序的建议。
if($q=$dbh->prepare($sql))
---这是干什么用的?我认为OP使用的是“$q”,而不是您通常会看到的“$stmt=$bdh->prepare($sql)”。此外,如果准备失败(post等中缺少值),则会抛出错误。