Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 插入PDO。我应该用try…catch吗?_Php_Mysql_Pdo - Fatal编程技术网

Php 插入PDO。我应该用try…catch吗?

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

我刚开始使用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->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等中缺少值),则会抛出错误。