在php中捕获错误并将其作为json返回给html

时间:2016-05-01 15:52:20

标签: php html json

是否有可能在php文件中捕获错误,比如在连接部分,然后将其作为json返回到HTML文件进行打印。

这是我的尝试:

<?php
    $srevernme = "localhost";
    $username = "root";
    $password = "";
    $dbname = "db";

    //create connection
    $conn = new mysqli($srevernme,$username,$password,$dbname);

    $errors = array();  // array to hold connection errors

    //check connection                                              //<-----POSSIBLE ERROR
    if ($conn->connect_error) {
         $data['success'] = false;
         $errors['error_info'] = "connection failed:" . $conn->connect_error ."Please try later.";
         $data['errors'] = $errors;
         echo json_encode($data);
        //die("connection failed:" . $conn->connect_error);
    }



if ($_SERVER['REQUEST_METHOD'] == "POST") 
    {        
        if (isset($_POST["fnameInput"]) && isset($_POST["lnameInput"]) && isset($_POST["addressInput"]) && isset($_POST["cityInput"]) && isset($_POST["zipcodeInput"]))
        {
            // prepare and bind
            $stmt = $conn->prepare("INSERT INTO users (first_name, last_name) VALUES (?, ?)");

            if ($stmt == FALSE) {                                       //<-----POSSIBLE ERROR          
                $data['success'] = false;
                $errors['error_info'] = "Connection failed: Cannot create connection to sql DB. Please try later.";
                $data['errors'] = $errors;
                echo json_encode($data);
                //die("Connection failed: Cannot create connection to sql DB. Please try later.");
                }

           if (empty($errors)) 
           { 
                    //mark as success
                    $data = array(); //array for saving the data
                    $data['success'] = true;

                    //get wanted data....

                   $data['wanted_data'] = json_encode($some_data);
                   echo json_encode($data);

                   $stmt->close();
            }
    }
    $conn->close();

相关部分标有//<-----POSSIBLE ERROR。 要清楚 - data表示我想要{html文件echo的数据,并且它有一个名为success的键,如果一切正常或true,则其值为false {1}}如果有错误。

编辑: 在当前状态下,当我击落MySQL服务器(来自chrome检查器)时,php文件以这种格式发送请求:

<br />
<b>Warning</b>:  mysqli::mysqli():  in <b>C:\xampp\htdocs\project\register.php</b> on line <b>7</b><br />
<br />
<b>Warning</b>:  mysqli::prepare(): Couldn't fetch mysqli in <b>C:\xampp\htdocs\ex3\register.php</b> on line <b>26</b><br />
{"success":false,"error_info":"Connection failed: Cannot create connection to sql DB. Please try later."}<br />
<b>Fatal error</b>:  Call to a member function bind_param() on null in <b>C:\xampp\htdocs\ex3\register.php</b> on line <b>39</b><br />

谢谢!

1 个答案:

答案 0 :(得分:0)

哦, 你的意思是什么?

似乎JSON到达就好了。你的意思是禁用 php错误?在这种情况下,您可以关闭php的标准错误报告,因此它只会显示您的自定义错误。 (请注意,这意味着您不会收到手动处理的错误)

有关详细信息,请参阅http://php.net/manual/en/function.error-reporting.php

// Turn off all error reporting
error_reporting(0);

这将阻止php回显自己的错误,从而只返回(有效的)json_encoded错误。

修改 如果出现错误,您需要返回json_encode($errors)而不是json_encode($data)

修改#2: 我真的建议你不要回复任何东西,直到你的脚本结束,这样就不那么容易混淆了。只需在最后添加if语句。

if(!empty($errors)){
 echo json_encode($errors);
 return false; //don't go on
}
else{
 echo json_encode($data);
 return false; //don't go on
}

如果出现错误,只需添加到$errors数组,因为在我看来,这是您首先要做的事情。