【问题标题】:Use ternary operator to check for successful INSERT in database?使用三元运算符检查数据库中是否成功插入?
【发布时间】:2015-04-29 23:02:58
【问题描述】:

使用 PHP 的三元运算符来检查数据库中的成功 INSERT(或更一般地说,任何函数的返回值)是否可以接受? PHP 手册似乎对堆叠的三元运算符很谨慎,我的 writeData 函数中嵌入了一些。

#pseudocode variables to give context
$conn = new PDO("mysql:host=localhost;dbname=blah", $user, $pass);
$form = sanitize($_POST);

#writeData returns true on success, false if PDO exception
#do nothing on success, warn if otherwise
writeData($conn, $form) ? : exit("Problem writing data to database.");

编辑:

我实际上在writeData 函数中trycatch。我还没有输出错误页面。假设我写了错误页面代码并在writeDatacatch块中输出,最好这样做:

if(!writeData($conn, $form)) die();

(或者三元版本,我有点同意,尤其是在这种情况下很难阅读)

【问题讨论】:

    标签: php pdo ternary-operator


    【解决方案1】:

    在这种特定情况下,不,这是不可接受的。 or die 是 2000 年处理错误的方式,截至 2015 年,您应该使用异常(这就是它们的用途):

    try {
        writeData($conn, $form);
    } catch(PDOException $e) {
       // try to recover, if possible
       // log the error
       // give the user a nicely formatted error page
    }
    

    【讨论】:

    • 我实际上是在writeDatatrycatch。这是执行此操作的最佳位置(即处理执行查询的函数中的异常)吗?我已经用更好的信息更新了这个问题。
    • @Escher:这是另一个问题,与三元运算符无关。一般规则是您不应该catch 无法处理的异常。由于writeData 在异常发生时不能做任何有意义的事情,你应该让异常冒泡到前端控制器,然后它必须决定做什么:从错误中恢复,或者尝试其他方法,或者通知用户并退出。
    【解决方案2】:

    在我看来,使用三元运算符从来都不是一个好习惯。适当的条件句总是更容易阅读和理解。 The debate goes on.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 2021-10-06
      • 1970-01-01
      • 2019-10-08
      • 2018-03-30
      • 1970-01-01
      相关资源
      最近更新 更多