【发布时间】:2014-03-11 00:06:55
【问题描述】:
我是 PHP 新手,我正在尝试学习 PDO。我正在尝试构建一个页面,我可以在其中将信息(新闻等)发布到数据库和另一个页面,我可以在其中查看数据库中的内容。
我在这里读到人们说您不应该使用 try catch 运算符来处理错误消息。我理解这一点,因为你不应该使用类似的东西:
CreateNews.php
<?php
header("Content-Type: text/html; charset=utf-8");
// Create presets for connection
$dsn = "mysql:host=localhost;dbname=dbname;charset=utf8'";
$opt = array(
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"
);
// Check if form is being posted
if ($_SERVER['REQUEST_METHOD'] == "POST") {
// Check if fields are empty
if (!$_POST['name'] || !$_POST['email'] || !$_POST['title'] || !$_POST['content'] || !$_POST['timestamp']) {
echo "<p>Please fill in all of the fields!</p>";
exit();
}
else {
try { // Connects to server and executes the transfer of data
$pdo = new PDO($dsn, 'root','', $opt);
$sth = $pdo->prepare("INSERT INTO news (name, email, title, content, timestamp)
VALUES (:name, :email, :title, :content, :timestamp)");
$sth->bindParam(':name', $_POST['name']);
$sth->bindParam(':email', $_POST['email']);
$sth->bindParam(':title', $_POST['title']);
$sth->bindParam(':content', $_POST['content']);
$sth->bindParam(':timestamp', $_POST['timestamp']);
$sth->execute();
}
catch (PDOException $e) {
echo $e->getMessage();
}
echo "<p>Data submitted successfully!</p><br />To create another post <a href" . $_SERVER['PHP_SELF'] . ">click here</a>";
}
}
// Close the connection
$pdo = null;
?>
于是我去掉了上面的catch PDOException,然后得到了错误信息:
解析错误:语法错误,意外的“回声”(T_ECHO),期待捕获(T_CATCH)
如果我删除回声,我仍然会收到“预期捕获 T_CATCH 错误。
当人们说您不应该使用 try catch 运算符时,我是否误解了他们的意思?
如果是我应该如何使用它?
如果您发现代码中有任何我做错或不必要的地方,请随时发表评论。我对这一切都很陌生,仍在努力学习! :)
谢谢!
【问题讨论】:
-
所以你删除了catch,但留下了try?没有捕获就无法尝试...
-
此外,使用 try/catch 也不错。在整个脚本中只使用一个包罗万象的部分是一种不好的形式。但这与你上面的完全不同。
-
啊当然。谢谢!我完全错过了尝试仍然存在。那么对于代码的某些部分独立使用catch可以吗?
-
So it's okay to use a catch independently for certain parts of code?这就是 try/catch 的真正意义……您可以控制如何处理异常 -
try 后面必须跟着 catch。一个好的做法是尝试使用可能会产生错误的代码,仅此而已。