【问题标题】:Importing CSV FIle In Wordpress Database在 Wordpress 数据库中导入 CSV 文件
【发布时间】:2016-02-11 00:48:00
【问题描述】:

我编写了一个 php 脚本来将 CSV 文件导入 wordpress 数据库。我今天一直在处理许多不同的错误,这些错误导致网站崩溃,直到我修复它们。

现在所有错误都已清除,函数末尾的字符串正在打印到屏幕上,好像一切正​​常,但它没有将我的数据输入数据库。

另外为了测试,我删除了创建数据库部分,只留下删除以查看它是否会删除数据库,但它没有。所以基本上看起来我的函数没有错误,但它正在运行。而且它实际上并没有做任何事情。我不明白每次出现错误或文件路径不存在但实际上并未执行我尝试执行的操作时,它如何通过函数告诉我。

任何有关如何解决此问题或从这里去哪里的意见将不胜感激,

function productsExec() {

       require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
       global $wpdb;
       global $simple_prod_version;

       $table_name = $wpdb->prefix . "wuno_inventory";
       if($wpdb->get_var("show tables like '$table_name'") != $table_name) {

       $sql = "DROP TABLE IF EXISTS $table_name";
       dbDelta($sql);
    // $wpdb->query($sql);

      $sql = "CREATE TABLE " . $table_name . " (
      id int(8) NOT NULL AUTO_INCREMENT,
      wuno-product varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
      wuno-description varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
      wuno-alternates varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
      wuno-onhand varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
      wuno-condition varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
      PRIMARY KEY (id)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;";

        dbDelta($sql);
    // $wpdb->query($sql);

    //Upload File
    if (is_uploaded_file($_FILES['inventory.csv']['tmp_name'])) {
        echo "<h1>" . "File ". $_FILES['inventory.csv']['name'] ." uploaded successfully." . "</h1>";
        echo "<h2>Displaying contents:</h2>";
        readfile($_FILES['inventory.csv']['tmp_name']);
    }
    //Import uploaded file to Database
    $handle = fopen(inventory.csv, 'w');
    while (($data = fgetcsv($handle, 10000, ",")) !== FALSE) {
        $insert = "INSERT INTO" . $table_name . "(wuno-product, wuno-description, wuno-alternates, wuno-onhand, wuno-condition)" .     
        "VALUES ('$data[0]', '$data[1]', '$data[2]', '$data[3]', '$data[4]')";
        $results = $wpdb->query( $insert );
    }
    fclose($handle);
        echo 'Everything seems to be running smoothly.';
    }
}

【问题讨论】:

  • 据我所知,这个INSERT INTO" . $table_name . " 转换为,例如INSERT INTOtablename 并且您有连字符用于MySQL 正在转换为wuno MINUS product 等的列名。检查错误会告诉关于它。
  • 非常感谢您的反馈,我没有收到任何错误。我会尝试找出原因
  • 您确定错误检查已开启?看看这个关于 WordPress 开发堆栈交换的问答wordpress.stackexchange.com/questions/16382/… - 和$wpdb-&gt;last_error
  • 是的,先生,它已开启。它显示了打开错误检查时始终显示的典型错误。我将 wuno-products 更改为 wuno_products,并确保数据库表上的前缀与其他所有内容一样。因为我在表名中声明了这一点。唯一改变的是我最后的字符串现在没有触发,但仍然没有错误。我会检查链接谢谢。
  • 不客气。您还需要对其他列名执行相同的操作。祝你好运。

标签: php wordpress csv


【解决方案1】:

如 cmets 中所述,并根据 OP 的要求:

INSERT INTO" . $table_name . " 转换为,例如INSERT INTOtablename,因为INFO" 之间没有空格

另外,对于 MySQL 将其转换为 wuno MINUS product 的列名,您有连字符,作为数学方程式,其他列名也是如此。

关于标识符限定符,请咨询http://dev.mysql.com/doc/refman/5.7/en/identifier-qualifiers.html

您可以使用连字符,但需要在列名周围使用记号。

$insert = "INSERT INTO " . $table_name . " (`wuno-product`, `wuno-description`, `wuno-alternates`, `wuno-onhand`, `wuno-condition`)

编辑:

我发现了别的东西。

$handle = fopen(inventory.csv, 'w');

文件名周围应该有引号:

$handle = fopen("inventory.csv", 'w');

根据fopen()http://php.net/manual/en/function.fopen.php上的手册

$handle = fopen("c:\\folder\\resource.txt", "r");

并且错误报告会向您发送有关它的通知。

另外,由于您使用的是$_FILES,并且如果使用表单,它应该是 POST 方法并包含有效的 enctype。

但是,这似乎无效$_FILES['inventory.csv'] 或不清楚。

通常,第一个数组参数是匹配的名称属性。请参阅上面的手动链接。

还将error reporting 添加到文件顶部,这将有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Then the rest of your code

旁注:显示错误应该只在暂存阶段完成,而不是在生产阶段。

【讨论】:

  • 嘿,非常感谢您抽出宝贵时间帮助我。你真的帮了很多忙。我走得更远,因为你让我克服了那个困难。弗雷德有一个美好的夜晚。
  • @wuno 不客气。不过请重新加载我的答案,因为我发现了关于$_FILES['inventory.csv'] 的其他内容,并留下了一个链接来查看文件处理方面的内容。也有一个美好的夜晚,谢谢。 干杯
  • 好的,谢谢,现在看来文件上传是我需要修复的全部内容了。基本上,我决定让他们将文件通过 ftp 传输到服务器,因为它可能长达 88k 行。所以我想我需要检查文件是否存在,然后将它从 csv 转换为 mysql。我目前正在查找 if(isset) 以查看是否可以解决问题。
  • @wuno 不客气。 isset() 可以,但最好使用!empty(),如“非空”。因为isset() 可能会给输入带来误报。
  • !empty() vs file_exists(path) 相同的东西还是一个比另一个更好?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-30
  • 2017-01-21
  • 1970-01-01
  • 1970-01-01
  • 2017-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多