$wpdb->last_error不显示出错时的查询

时间:2016-04-29 作者:Ghazanfar Mir

我正在使用$wpdb->insert. 然而,一旦出错,我似乎没有从中获得任何信息$wpdb->last_error. 这可能是什么原因?

我已经设置了此配置wp-config

define(\'WP_DEBUG\', false);
define(\'SAVEQUERIES\', true);
代码如下:

$result = $wpdb->insert($this->table, $data_);
if (false === $result) {
   error_log($wpdb->last_error);
}
$this->table$data_ 在成功运行时正确填充。但我似乎没有得到关于失败查询的任何信息。有什么方法可以让我运行实际的查询吗$wpdb->insert?

Solution

好的,我解决了问题。插入查询失败,因为其中一列数据太大,超过了数据库的列大小。该列为varchar(500) 但实际数据超过500个字符,因此查询失败。我将列更改为TEXT 插入成功,无错误。

3 个回复
SO网友:TheDeadMedic

如果您想要查询,那么$wpdb->last_query (请注意,您也不需要SAVEQUERIES, 仅当您需要每个查询的日志时($wpdb->queries)

last_error 是哦,错误!

Update: 可能的解释last_error 为空-这是wpdb::query():

// If we\'re writing to the database, make sure the query will write safely.
if ( $this->check_current_query && ! $this->check_ascii( $query ) ) {
    $stripped_query = $this->strip_invalid_text_from_query( $query );
    // strip_invalid_text_from_query() can perform queries, so we need
    // to flush again, just to make sure everything is clear.
    $this->flush();
    if ( $stripped_query !== $query ) {
        $this->insert_id = 0;
        return false;
    }
}

// Redacted code

// Keep track of the last query for debug..
$this->last_query = $query;

$this->_do_query( $query );

// Redacted code

// If there is an error then take note of it..
if ( $this->use_mysqli ) {
    $this->last_error = mysqli_error( $this->dbh );
} else {
    $this->last_error = mysql_error( $this->dbh );
}
换句话说,WordPress似乎会预先检查查询,如果它认为查询将失败,则会中止查询-在这种情况下,您将获得return false 但不会设置错误(因为它从未发送到MySQL服务器)。

SO网友:Liam Mitchell

https://core.trac.wordpress.org/ticket/32315

其中一列输入可能大于该列。Wordpress检测到这一点,甚至不会将查询发送到DB。

这里的Diff显示了一个wp-db补丁,您可以在最后一条错误消息中插入该补丁以获取更多信息,这样它就不会为空。

enter image description here

SO网友:user5200704

try this

$wpdb->show_errors();
$result = $wpdb->insert($this->table, $data_);

相关推荐

$wpdb->get_row返回什么?

由于插件中的调试和错误查找,我有一个简短的问题。$wpdb->;如果没有结果,返回get\\u row()?文件说明:(array|object|null|void) Database query result in format specified by $output or null on failure. 但当查看源代码时,它似乎返回了;null“;。。。如果您能快速提供帮助,我将不胜感激,我一直认为它会返回一个空数组,但我可能弄错了!