бит поздно к партии здесь, но я просто смотрю на то же самое. Я просмотрел код wp-db.php
версии 4.4.2.
В строке 1422, внутри метода flush()
есть немного кода, который сбрасывает last_error
свойство:
$this->last_error = '';
Этот flush()
метод вызывается в методе query()
на линии 1693:
$this->flush();
Метод get_results()
вызывает query()
по строке 2322:
if ($query) {
$this->query($query);
} else {
return null;
}
С этим мы можем быть уверены, что более или менее каждый раз, когда get_results()
(Или get_row()
тоже по этому вопросу), называется, query()
и flush()
оба называются, что гарантирует, что last_error
устанавливается в пустую строку перед запрос казнены.
Так что, если запрос выполняется (если это не так, возвращается null
- если запрос пуст, например), last_error
должен содержать сообщение об ошибке, если запрос по какой-то причине был неудачным.
С last_error
: flush()
ed/reset каждый раз, он должен содержать только ошибку для последнего запрошенного запроса, а не последнюю ошибку для любого запрошенного ранее запроса. Имея это в виду, должно быть безопасно полагаться на last_error
, чтобы определить, что-то пошло не так с запросом.
$results = $wpdb->get_results($sql);
if (is_null($results) || !empty($wpdb->last_error)) {
// Query was empty or a database error occurred
} else {
// Query succeeded. $results could be an empty array here
}
Не самый интуитивный, на мой взгляд, но, похоже, этого достаточно.
Лично я написал свой собственный класс около wpdb
для себя. Это мой метод getResults()
.
public function getResults($query, $bindings = [])
{
// Prepare the statement (My prepare method inspects $query and just returns it if there's no bindings, otherwise it uses $wpdb->prepare()
$prepared = $this->prepare($query, $bindings);
// Execute the statement
$rows = $this->db->get_results($prepared, ARRAY_A);
// If an array was returned and no errors occurred, return the result set
if (is_array($rows) && empty($this->db->last_error)) {
return $rows;
}
// On failure, return false
return false;
}
Надеюсь, это поможет.
Затем я получаю последнюю ошибку, если последний запрос имеет ошибку или нет. Последней ошибкой могло быть 10 запросов назад. –
Можете ли вы проверить мое обновление –