поймайте ошибку в php и верните ее как json в html

можно ли поймать ошибку в php-файле, скажем в разделе Подключение, и вернуть ее в HTML-файл как json для печати.

Это моя попытка:

<?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представляет данные, которые я хочу echoв html-файл, и у него был ключ с именемsuccess, что его значения, trueесли все в порядке или falseесли есть ошибка.

РЕДАКТИРОВАТЬ:
В текущем состоянии php файл отправляет запрос в этом формате, когда я сбил MySQL server (из Chrome inspector):

<br />
<b>Warning</b>:  mysqli::mysqli():  in <b>C:xampphtdocsprojectregister.php</b> on line <b>7</b><br />
<br />
<b>Warning</b>:  mysqli::prepare(): Couldn't fetch mysqli in <b>C:xampphtdocsex3register.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:xampphtdocsex3register.php</b> on line <b>39</b><br />

Спасибо!

1 ответ

  1. О, ты это имеешь в виду?

    Кажется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)того, чтобы в случае ошибки.

    edit#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массив, как мне кажется, это то, что вы хотите сделать в первую очередь.