【问题标题】:Wordpress 4.2.2 update - failing wpdb->insertWordpress 4.2.2 更新 - wpdb->insert 失败
【发布时间】:2015-07-18 08:40:02
【问题描述】:

上下文

我一直在开发一个新的 wordpress 博客作为个人网站。其中一部分是,我有一个自定义联系表,人们可以在其中输入他们的详细信息以与我联系。它一直工作到早上,之后我出于安全原因更新到 4.2.2v。

问题

更新后,表单无法将任何信息保存到数据库中。 $wpdb->insert_id 返回 0。查询是一样的,页面是一样的,一切都是一样的。唯一的变化是我从 4.2.1v 升级到了 4.2.2v。

最近的更新有什么问题吗,还是我必须在word press manual update 之后执行更多步骤?

调试完成...

我已确保数据库版本已更新。它显示 31535。当使用 $wpdb->lastquery$wpdb->print_error() 进行调试时,我得到了

WordPress database error: []
SHOW FULL COLUMNS FROM `wp_tst_tbl_contacts`

?

我不明白这里有什么问题。如果我使用相同的用户 wp 用户凭据在命令行上运行相同的插入查询以及上述show full columns,它会完美运行。

注意:如果需要更多信息,请询问。

【问题讨论】:

    标签: mysql wordpress


    【解决方案1】:

    我找到了问题的原因。这是由于列宽限制。

    我有一个 VARCHAR(9) 列,我正在发送 16 个字符长度的数据。 4.2.2 中的新更改获取表元数据并裁剪数据,使其适合 DB 中定义的列大小。它还比较了作物前和作物后的数据。如果它们不匹配,则失败。

    问题是,它静默失败,没有抛出错误。我通过调试 wpincludes/wp-db.php 文件发现了这一点。

    请检查您的列限制和您发送的列数据长度。

    一旦我增加了列宽(因为数据肯定会超过 9 个字符),问题就解决了。

    【讨论】:

    • 非常感谢!他们应该把它放在更新日志中。它破坏了我们网站的一些功能,我们无法弄清楚原因,因为我们没有改变任何东西。你应该得到更多的支持 :) codex.wordpress.org/Version_4.2.2
    • 当 MySQL 完全能够为您截断插入时,wordpress 没有理由需要检查字符串长度。默默地失败是Word Press错误的可怕失败。感谢您找出原因!
    • 如果您的自定义 post_type 大于 20 个字符(post_type 列的默认大小),也会发生此错误。
    • 已确认,4.6 也这样做了,插件作者经常忘记 IP 最多可以有 50 个字符,所以如果他们将条目存储到 IP 所在的表中,例如VARCHAR 15 甚至 20 和 IPv6 用户进来 - wpdb 插入失败:)
    • @DarrylE.Clarke 如果您的应用程序设计正确,则不需要 DB 为您截断某些内容……我认为这是 WP 说的“嘿,伙计,您的设计可能很糟糕! ' - 在很多情况下 - 就是这样 :)
    【解决方案2】:

    我遇到了同样的问题,结果是一些未转义的值从 csv 导入函数被推送到数据库中。

    我在适当的地方应用了正确的esc_url() 和/或esc_attr() 和/或esc_html() 来清理预插入的值,然后查询成功运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-09
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 2019-10-03
      • 2013-09-07
      • 2011-01-24
      相关资源
      最近更新 更多