是否有可能在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 />
谢谢!
答案 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
数组,因为在我看来,这是您首先要做的事情。