使用$qpdb->Query()更新总是返回0行受影响

时间:2015-06-22 作者:reallynice

使用运行更新时,我遇到了一个奇怪的情况$wpdb->query().

鉴于users 表,带列user_id (主键)和status, 并且用户3已存在且状态为0,我运行以下查询:

update users
set status = 8
where user_id = 3
在我的计算机上,使用$wpdb->query, 我得到的结果是1:1行受影响。

在另一台机器上,我用PHP代码运行查询,总是得到0行:在运行查询之前,我检查了状态,结果是0,如果我用另一个工具(例如命令行mysql客户端)运行它,它会告诉我这是1个受影响的行。

wpdb的查询方法返回更新时受影响的行数(https://codex.wordpress.org/Class_Reference/wpdb#Running_General_Queries).

我的机器和远程机器有相同的PHP版本(5.4.40)、相同的mysql服务器版本和相同的wordpress版本(4.2.2)。关于mysql PHP扩展,我在本地安装了mysql、mysqli和mysqlnd:在另一台机器上,我安装了mysql和mysqli。

有没有人对可能的原因有一些线索?非常感谢。

Edit 1

我还尝试使用the update method, 但结果始终是0行受影响。我开始想,我发现$wpdb抽象层中存在不连贯性。

2 个回复
SO网友:s_ha_dum

wpdb uses PHP\'s mysqli_affected_rows() or mysql_affected_rows(), 可以禁用via an argument in php.ini. 我猜这就是发生的事情。检查disabled_functions 在您的php.ini 文件并删除对这些函数的引用。

在我的脑海中,我不确定像Suhosin这样的扩展是否会干扰这个函数,但这肯定是可能的。

SO网友:Harm

我希望可能的答案仍然有用。我也遇到过同样的问题,有3台服务器和一个WP页面中的一些php脚本,用于读取/写入WP db。一台服务器工作正常,另两台服务器在wpdb->更新时总是返回0。虽然检查数据库表明确实进行了更改,但确实表明没有对数据库进行任何更改。事实证明,由于Yoast SEO造成的AJAX干扰,受影响的页面运行了两次。然而,生成的html只显示最新的结果。关闭Yoast SEO解决了这个问题,结果是未受影响的服务器从一开始就关闭了Yoast SEO。在我的例子中是was Yoast,但任何AJAX交互都可能导致您如此透彻地描述的问题。

结束

相关推荐

现有wp_Query中的wp_Query停止下一篇文章,显示

我有一个查询,显示了我的博客主页上的5篇最新帖子。在第二篇帖子之后,我添加了一个div#more-news 然后,这些岗位按顺序进行。在我尝试在div中添加另一个查询之前,一切都正常有序#more-news. 现在发生的是前两个帖子加载良好,然后是div#more-news, 其中包含现有5篇文章之后的接下来5篇文章(6、7、8、9、10),但是在添加我的第二个查询后,而不是按顺序继续发布,它将页面标题“主页”显示为第四篇文章,然后显示为第三篇&;第4个职位。试着更好地解释我在追求什么,这可能有助于