В настоящее время я пытаюсь написать обработку ошибок для следующей ситуации.Я хочу быть в состоянии отловить ошибку, когда база данных --read-only
и пытается записать.
Ошибка базы данных WordPress. Команда INSERT, запрещенная пользователю 'readonly' @
Эта ошибка выдается, потому что база данных --read-only
и пытается записать в базу данных.Однако эта ошибка должна была быть обнаружена моим условным условием catch
.
function drools_request($data, $uid) {
try {
$db = _get_db();
$db->insert("requests", [
"uid" => $uid,
"data" => json_encode($data),
]);
}
catch(Error $e){
echo 'Error writing to database: ', $e->getMessage(), "\n";
}
}
Как видно из приведенного выше фрагмента, метод $db->insert(
корректно прерывается, поскольку пытается записать в экземпляр $db
--read-only
Тем не менее, catch(Error $e)
не работает, почему?
Вот полный класс:
<?php
namespace StatCollector;
function drools_request($data, $uid) {
try {
$db = _get_db();
$db->insert("requests", [
"uid" => $uid,
"data" => json_encode($data),
]);
}
catch(Exception $e)
{
echo 'Error writing to database: ', $e->getMessage(), "\n";
}
}
function drools_response($response, $uid) {
try {
$db = _get_db();
$db->insert("responses", [
"uid" => $uid,
"data" => json_encode($response),
]);
}
catch(Exception $e)
{
echo 'Error writing to database: ', $e->getMessage(), "\n";
}
}
function results_sent($type, $to, $uid, $url = null, $message = null) {
try {
$db = _get_db();
$db->insert("messages", [
"uid" => $uid,
"msg_type" => strtolower($type),
"address" => $to,
"url" => $url,
"message" => $message
]);
}
catch(Exception $e)
{
echo 'Error writing to database: ', $e->getMessage(), "\n";
}
}
function peu_data($staff, $client, $uid) {
try {
if (empty($uid)) {
return;
}
$db = _get_db();
if (! empty($staff)) {
$db->insert("peu_staff", [
"uid" => $uid,
"data" => json_encode($staff)
]);
}
if (! empty($client)) {
$db->insert("peu_client", [
"uid" => $uid,
"data" => json_encode($client)
]);
}
}
catch(Exception $e)
{
echo 'Error writing to databse: ', $e->getMessage(), "\n";
}
}
function response_update() {
$uid = $_POST['GUID'];
$url = $_POST['url'];
$programs = $_POST['programs'];
if (empty($uid) || empty($url) || empty($programs)) {
wp_send_json(["status" => "fail","message" => "missing values"]);
return wp_die();
}
try {
$db = _get_db();
$db->insert("response_update", [
"uid" => $uid,
"url" => $url,
"program_codes" => $programs
]);
wp_send_json(["status" => "ok"]);
wp_die();
}
catch(Exception $e)
{
echo 'Error writing to database: ', $e->getMessage(), "\n";
}
}
Почему try
и catch
не работают?Что я могу сделать, чтобы решить эту проблему?этот пост не сработал. PHP try / catch и фатальная ошибка