$wpdb->insert()
退货false
我知道这意味着插入失败了。现在,我想知道为什么插入失败。
根据这张票https://core.trac.wordpress.org/ticket/32315 问题可能是该值太长或包含错误字符。
以下是插入查询:
$result = $wpdb->insert(\'table\', $ins_args, array(\'%d\', \'%d\', \'%s\', \'%s\', \'%s\', \'%s\'));
很难显示
$ins_args
数组值,因为有些值很长。特别是针对名为
value
. 但我使用类型
longtext
对于该字段。这个插页用得很多。大多数时候,它都能成功。因此,这确实像是一个编码或大小问题。
我如何知道问题是什么?$wpdb->last_error
为空
SO网友:Krzysiek Dróżdż
$wpdb->insert()
方法返回false
如果无法插入行。否则,它将返回受影响的行数(始终为1)。
您可以使用show_errors
和hide_errors
, 分别地
<?php $wpdb->show_errors(); ?>
<?php $wpdb->hide_errors(); ?>
您还可以使用打印最近查询生成的错误(如果有)
print_error
.
<?php $wpdb->print_error(); ?>
您还可以使用
$last_error
字段,其中将包含MySQL生成的最新错误文本。
SO网友:Brian C
悲哀地wp-db.php
如果试图写入列的数据太长而无法容纳,则返回false,且没有错误。如果不显式检查每一列的长度,这将成为调试的噩梦(虽然wp-db.php确实提供了内部函数,但很难知道长度)。
我创建了一个微小的插入式覆盖,它修改了wpdb的行为,以便在此场景中返回一个错误。要安装它,只需将其复制并粘贴到WordPress wp内容/数据库中即可。php文件。它只覆盖一个简短的wpdb方法(process_fields()
) 添加错误消息以标识过长的列。请注意,db。php将经受住核心升级,您只需删除wp内容/数据库即可。php文件随时恢复为纯核心wpdb。
虽然我自己使用,但像往常一样,在使用前进行测试,使用风险自负。
错误代码最初取自idea by Liam Murphy here.
Gist for drop in db.php here