1

我已经完成了我的代码的主要功能,但是我有大量的“无用”代码要删除。
这是一个例子:

else if(isset($_POST['act']) && $_SESSION['status']<3 && $_POST['act']=='delete_ticket'){
    $encid=preg_replace('/\s+/','',$_POST['enc']);
    $encid=($encid!='' && strlen($encid)==87) ? $encid:exit();
    $mysqli = new mysqli($Hostname, $Username, $Password, $DatabaseName);
    $stmt = $mysqli->stmt_init();
    if($stmt){
        $query = "UPDATE ".$SupportTicketsTable." a
                    INNER JOIN ".$SupportUserTable." b
                        ON b.id=a.operator_id
                    SET b.assigned_tickets= CASE  WHEN b.assigned_tickets!='0' THEN (b.assigned_tickets-1) ELSE b.assigned_tickets END  
                WHERE a.enc_id=?";
        if($prepared = $stmt->prepare($query)){
            if($stmt->bind_param('s', $encid)){
                if($stmt->execute()){
                    $query = "DELETE FROM ".$SupportMessagesTable." WHERE `ticket_id`=(SELECT `id` FROM ".$SupportTicketsTable." WHERE `enc_id`=?) ";
                    if($prepared = $stmt->prepare($query)){
                        if($stmt->bind_param('s', $encid)){
                            if($stmt->execute()){
                                $query = "SELECT enc FROM ".$SupportUploadTable." WHERE `ticket_id`=?";
                                if($prepared = $stmt->prepare($query)){
                                    if($stmt->bind_param('s', $encid)){
                                        if($stmt->execute()){
                                            $stmt->store_result();
                                            $result = $stmt->bind_result($mustang);
                                            if($stmt->num_rows>0){
                                                $path='../upload/';
                                                while (mysqli_stmt_fetch($stmt)) {
                                                    if(file_exists($path.$mustang)){
                                                        file_put_contents($path.$mustang,'');
                                                        unlink($path.$mustang);
                                                    }
                                                }
                                            }
                                            $query = "DELETE FROM ".$SupportUploadTable." WHERE `ticket_id`=?";
                                            if($prepared = $stmt->prepare($query)){
                                                if($stmt->bind_param('s', $encid)){
                                                    if($stmt->execute()){
                                                        $query = "DELETE FROM ".$SupportFlagTable." WHERE `enc_id`=?";
                                                        if($prepared = $stmt->prepare($query)){
                                                            if($stmt->bind_param('s', $encid)){
                                                                if($stmt->execute()){
                                                                    $query = "DELETE FROM ".$SupportTicketsTable." WHERE `enc_id`=?";
                                                                    if($prepared = $stmt->prepare($query)){
                                                                        if($stmt->bind_param('s', $encid)){
                                                                            if($stmt->execute()){
                                                                                echo json_encode(array(0=>'Deleted'));
                                                                            }
                                                                            else
                                                                                echo json_encode(array(0=>mysqli_stmt_error($stmt)));
                                                                        }
                                                                        else
                                                                            echo json_encode(array(0=>mysqli_stmt_error($stmt)));
                                                                    }
                                                                    else
                                                                        echo json_encode(array(0=>mysqli_stmt_error($stmt)));
                                                                }
                                                                else
                                                                    echo json_encode(array(0=>mysqli_stmt_error($stmt)));
                                                            }
                                                            else
                                                                echo json_encode(array(0=>mysqli_stmt_error($stmt)));
                                                        }
                                                        else
                                                            echo json_encode(array(0=>mysqli_stmt_error($stmt)));
                                                    }
                                                    else
                                                        echo json_encode(array(0=>mysqli_stmt_error($stmt)));
                                                }
                                                else
                                                    echo json_encode(array(0=>mysqli_stmt_error($stmt)));
                                            }
                                            else
                                                echo json_encode(array(0=>mysqli_stmt_error($stmt)));
                                        }
                                        else
                                            echo json_encode(array(0=>mysqli_stmt_error($stmt)));
                                    }
                                    else
                                        echo json_encode(array(0=>mysqli_stmt_error($stmt)));
                                }
                                else
                                    echo json_encode(array(0=>mysqli_stmt_error($stmt)));
                            }
                            else
                                echo json_encode(array(0=>mysqli_stmt_error($stmt)));
                        }
                        else
                            echo json_encode(array(0=>mysqli_stmt_error($stmt)));
                    }
                    else
                        echo json_encode(array(0=>mysqli_stmt_error($stmt)));
                    }
            else
                echo json_encode(array(0=>mysqli_stmt_error($stmt)));
            }
        else
            echo json_encode(array(0=>mysqli_stmt_error($stmt)));
    }
    else
            echo json_encode(array(0=>mysqli_stmt_error($stmt)));
}
else
    echo json_encode(array(0=>mysqli_stmt_error($stmt)));
exit();
}

如您所见,mysqli 连接的语句太多if:这是我要删除的部分,有没有办法删除它们?我试图将它包装起来trycatch但代码无论如何都会返回成功echo(这是一个 AJAX 调用)。
我读过mysqli在try和catch函数上遇到了一些问题,所以我看了一下PDO,但我不是专家,我不明白我是否能得到与我发布的代码相同的结果有了它,我还读到我必须将错误模式更改为PDO::ERRMODE_EXCEPTION,但我不太了解这一点。
基本上:有人可以向我解释 PDO 如何处理错误吗?

4

1 回答 1

0

首先,您向客户端发送 mysqli 错误的想法是非常错误的。客户根本不知道如何处理它。所以,你需要一些其他的方法来处理错误。

我会说只有 500 个响应状态就足够了。你可以用你的 AJAX 代码检查它并给出一些借口。

虽然错误消息 eiself 必须记录在服务器端以供您将来参考。

你同意这样的安排吗?

假设你同意。

Mysqli 方法#1:

你可以改变每一个

if(statement){

statement or trigger_error($mysqli->error);

喜欢

$prepared = $stmt->prepare($query) or trigger_error($mysqli->error);

这样,您将不需要嵌套 if:第一个 mydsli 错误将中止脚本执行。

Mysqli 方法 #2:

创建一个包装函数来调用你的查询是非常好的主意

$query = "DELETE FROM ".$SupportMessagesTable." WHERE `ticket_id`=(SELECT `id` FROM ".$SupportTicketsTable." WHERE `enc_id`=?) ";
$db->query($query, $encid);

为此,您可以使用我的safeMysql 库。这是一个带有 2 个第一个查询的示例:

$query = "UPDATE ".$SupportTicketsTable." a
                INNER JOIN ?n b
                    ON b.id=a.operator_id
                SET b.assigned_tickets= CASE  WHEN b.assigned_tickets!='0' THEN (b.assigned_tickets-1) ELSE b.assigned_tickets END  
            WHERE a.enc_id=?i";
$db->query($query,$SupportUserTable, $encid);
$query = "DELETE FROM ?n WHERE `ticket_id`=(SELECT `id` FROM ?n WHERE `enc_id`=?i) ";
$db->query($query, $SupportUserTable, $SupportTicketsTable, $encid);
$query = "SELECT enc FROM ?n WHERE `ticket_id`=?i";
$mustang = $db->getOne($query, $SupportUserTable, $encid);
if($mustang){

等等。

例外说明

例外只是petit mort法语中“小死亡”的代表(字面意思。虽然它有另一个,不是那么直接的意思)。它实际上是一个本地 die()。它将终止进一步的脚本执行 -请注意嵌套 if 的确切目的

因此,在使用 PDO 时,您可以将所有语句一个接一个地编写,而无需进行错误检查。PDO 将在内部执行它并抛出异常,从而终止进一步的执行。

可以捕获异常,但不是必需的。一个人可能会放手,它将转换为可以记录的 PHP 错误。

于 2013-08-20T14:35:24.800 回答