1

这是插件运行的代码。它将 CSV 文件数据传递给 MySQL。:

      $new_post = array(
        'post_title'    => $row['Account Name'],
        'post_content'  => $row['Yellow Page Business Description'],
        'post_status'   => 'publish',
        'post_author'   => 1,
        'post_type'     => 'business',
        'post_category' => array(0)
      );


      try
      {
        $result = wp_insert_post(add_magic_quotes($new_post), true);

        if (is_wp_error($result)) {
          $output .= '<p style="color:red;">ERROR LOADING CSV FILE</p>';
          $output .= "<p style='color:red;'>Failed to import {$new_post['post_title']}</p>";
          $output .= '<pre>'.$result->get_error_message().'</pre>';
        }
        else
        {
          $post_id = $result;

MySQL 向其报告:

[错误] WordPress 数据库错误 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 '))) AND (cj_posts.post_password = '') AND cj_posts.post_type = 'business' AND ' 在第 1 行中使用正确的语法来查询 SELECT DISTINCT SQL_CALC_FOUND_ROWS cj_posts。 * FROM cj_posts 左连接 cj_term_relationships 为 trel ON (cj_posts.ID = trel.object_id) 左连接 cj_term_taxonomy AS ttax ON (( ttax.taxonomy = 'category') AND trel.term_taxonomy_id = ttax.term_taxonomy_id) 左连接 cj_terms AS TER ON ( ttax.term_id = tter.term_id) LEFT JOIN cj_comments AS cmt ON ( cmt.comment_post_ID = cj_posts.ID ) WHERE 1=1 AND ( ( ((())) AND (cj_posts.post_password = '') AND cj_posts.post_type = '业务' AND (cj_posts.post_status = '发布'

cj_ 是 WordPress 前缀。

我认为这是使用 magic_quotes 不起作用,因此它将字符从 CSV 数据传递到 MySQL 没有正确转义。但我不是 100% 确定,我不确定用什么来代替它。

4

1 回答 1

1

你不需要使用add_magic_quotes. 从wp_insert_post文档中:

此函数在数据库中插入帖子(和页面)。它清理变量,进行一些检查,填充缺失的变量,如日期/时间等

重点是我的。

https://codex.wordpress.org/Function_Reference/wp_insert_post

add_magic_quotes本质上迭代一个数组并调用add_slashes每个元素。这是完全没有必要的,因为wp_insert_post它会清理任何输入。无论您希望add_magic_quotes解决什么问题,它都没有。

于 2015-06-10T22:05:16.690 回答