Php 分析错误:语法错误,需要catch(T_catch)

Php 分析错误:语法错误,需要catch(T_catch),php,exception,try-catch,Php,Exception,Try Catch,我是PHP新手,我正在努力学习PDO。我正在尝试构建一个页面,在其中我可以将信息(新闻等)发布到数据库,另一个页面可以查看数据库中的内容 我在这里读到有人说不应该使用try-catch操作符来处理错误消息。我理解这一点,因为您不应该使用以下内容: CreateNews.php <?php header("Content-Type: text/html; charset=utf-8"); // Create presets for connection $dsn = "mysql:host

我是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;
?>

我在这里读到有人说不应该使用try-catch操作符来处理错误消息

这些人说得很对

不使用异常的原因是什么 异常不应用于正常的应用程序流

让我们看一看来自的
逆($x)
函数,它返回
1/$x
,如果将
0
作为
$x
传递,则会引发异常,因为不能除以
0

让我们进一步假设变量来自发布的表单,因此可以输入
0
。在这种情况下,应使用
if
-子句检查正确的值,如:

<?php
if (intval($_POST['value']) == 0) {
    echo 'You cannot pass 0 into inverse(). Please enter another value.';
} else {
    echo 'We computed the inverse: ' . inverse(intval($_POST['value']));
}
?>
寻找线索 如果您希望在正常情况下出现某些特定错误,则应使用
If
语句检查这些错误。
如果没有,则让异常处理该问题

在您的情况下,通常不会期望查询执行出现异常。可能的错误原因是
服务器已离开
死锁
。这种错误是可能的,但不是在“正常”条件下。因此,您不希望使用
if
语句检查它们(您甚至无法事先检查可能的死锁)


因此,在您的情况下,您希望使用异常。那完全没关系。

所以你去掉了鱼钩,但留下了试一试?没有catch就不能尝试……此外,使用try/catch也不错。在整个脚本中只使用一个catch-all部分是不好的。但这和你上面说的完全不同。啊,当然。非常感谢。我完全错过了那次尝试。所以对代码的某些部分单独使用catch是可以的?
所以对代码的某些部分单独使用catch也是可以的?
这就是try/catch的真正意义所在。。。你可以控制处理异常的方式。尝试之后必须有收获。一个好的实践是尝试可能产生错误的代码,而不是更多。哇,这真的阐明了它是如何工作的!谢谢!:)
<?php
$x = supercomplicated_function();
try {
    $y = inverse($x);
    echo 'We computed the inverse: ' . $y;
} catch (Exception $e) {
    echo 'Unexpected situation. Do not know how to go on. Aborting.';
    die();
}
?>