Wpdb->使用特殊字符插入失败,排序规则为utf8mb4_unicode_520_ci

时间:2021-10-27 作者:user761076

我正在执行wpdb->insert(). 当一个字段包含特殊字段时,插入未完成,我得到错误

Wordpress数据库中的查询显示完整列时出错wp_my_table

如果我没有使用特殊字符,则插入操作是正确的。

显然,列排序规则是正确的,但有些地方出错了。我看到了这个post answers 但正如我所说,我的排序似乎是正确的。

这是我的表定义:

SHOW CREATE TABLE wp_my_table;

CREATE TABLE `wp_my_table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `c_name` varchar(50) COLLATE utf8mb4_unicode_520_ci NOT NULL,
  `creation_date` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
这是insert语句:

$wpdb->insert(\'wp_my_table\', 
             [\'c_name\'        => $_POST[\'c_name\'],
              \'creation_date\' => date(\'Y-m-d H:i:s\')
            ]); 
正在添加esc_sqlesc_html 没有帮助。

实际上,错误不在查询或插入本身中,而是在$\\u POST[\'c\\u name\']中,因为如果我使用硬编码字符串调用,查询将正常工作:

$wpdb->insert(\'wp_my_table\', 
             [\'c_name\'        => \'1º áá\',
              \'creation_date\' => date(\'Y-m-d H:i:s\')
            ]); 

2 个回复
SO网友:Scott Shubham

使用“清理”字段

sanitize_text_field($_POST[\'c_name\']);
更多信息https://developer.wordpress.org/reference/functions/sanitize_text_field/

SO网友:Nabeel Khan

你错过了, 在查询中使用$_POST.

试试这个,应该可以:

$wpdb->insert(\'wp_my_table\', 
             [\'c_name\'        => $_POST[\'c_name\'],
              \'creation_date\' => date(\'Y-m-d H:i:s\')
            ]); 

相关推荐

WPDB: Update table

我目前正在开发我的第一个WordPress插件,目前对如何更改数据库中的记录有点困惑。到目前为止,我已经使用$wpdb::update()函数解决了这个问题:public function toggle_status() { global $wpdb; $id = (int) $_POST["id"]; $active = (int) $_POST["active"]; $tablename = $wp