当$wpdb->Insert()返回FALSE时得到错误消息?

时间:2017-08-23 作者:Peter Westerlund

$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 为空

2 个回复
SO网友:Krzysiek Dróżdż

$wpdb->insert() 方法返回false 如果无法插入行。否则,它将返回受影响的行数(始终为1)。

您可以使用show_errorshide_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

结束

相关推荐

使用搜索词准备的$wpdb

我想了解为什么下面的脚本不起作用。不断获取错误:致命错误:函数wpdb::prepare()的参数太少,传递了1个。。。应为2。。。不知道我需要从哪里得到第二个论点。<?php $zoekvn = $_POST[\'zoekvn\'] if(isset($_POST[\'submit\'])): try{ $result = $wpdb->get_results($wpdb->prepare(