【发布时间】:2017-05-24 12:25:12
【问题描述】:
我有一个表单,其中包含用于连接数据库的字段。这包括主机名、数据库、用户名和密码。我正在使用 AJAX 调用连接到数据库。需要注意一些错误处理,其中之一是无法连接到数据库。
异常在 try-catch 语句中被捕获,我用错误消息更新了 $result 变量。然后将其返回给 AJAX 调用。
下面是简化版的代码:
AJAX 调用:
$.ajax({
url: _url + 'dbv.php',
type: 'POST',
data: {
db_host: $('input[name="db_host"]').val(),
db_name: $('input[name="db_name"]').val(),
db_username: $('input[name="db_username"]').val(),
db_password: $('input[name="db_password"]').val(),
save_path: $('input[name="save_path"]').val()
},
dataType: 'json',
success: function(data) {
if (data.error) {
console.log('success (error): ' + JSON.stringify(data));
}
else {
console.log('success: ' + JSON.stringify(data));
}
},
error: function(data) {
console.log('error: ' + JSON.stringify(data));
}
});
PHP:
try {
if ($_POST['db_host'] && $_POST['db_username'] && $_POST['db_password'] && $_POST['db_name'] && $_POST['save_path']):
$host = $_POST['db_host'];
$user = $_POST['db_username'];
$password = $_POST['db_password'];
$database = $_POST['db_name'];
$path = $_POST['save_path'];
else:
throw new Exception('Empty Fields', '1');
endif;
if (!$result->error):
$conn = new mysqli($host, $user, $password, $database);
// ...
mysqli_close($conn);
endif;
}
catch (Exception $e) {
$result->error = true;
$result->message = 'Error: ' . $e->getMessage();
}
$result->message = (!$result->error) ? 'Successful' : $result->message;
echo json_encode($result);
代码中的第一个异常Empty Fields被捕获并返回给success函数。我遇到的问题是error AJAX 状态不会在数据库连接不正确时触发。返回的数据包括 PHP 的默认错误消息和 $result 变量。这不应该只是$result 变量,与Empty Fields 异常相同吗?
正在发生的事情的屏幕截图:
错误响应文本包括 PHP 的错误和$result 变量:
“响应文本”:
PHP 的错误:
"警告: mysqli::mysqli(): php_network_getaddresses: getaddrinfo 失败:不知道这样的主机。在 ____\dbv.php 上 第 35 行
$result变量:{\"error\":true,\"message\":\"错误:php_network_getaddresses: getaddrinfo 失败:不知道这样的主机。 \"}"
我已经搜索了很多,看起来逻辑很好 - 也许我完全错过了一些东西。
两个类似于我正在尝试做的例子:https://stackoverflow.com/a/20938633/1275525,https://stackoverflow.com/a/12693587/1275525
【问题讨论】: