Импорт CSV в таблицу базы данных не работает?

Вопрос или проблема

global $wpdb;

if (isset($_POST["import"])) {

$fileName = $_FILES["file"]["tmp_name"];

if ($_FILES["file"]["size"] > 0) {

    $file = fopen($fileName, "r");

    while (($column = fgetcsv($file, 10000, ",")) !== FALSE) {


        $table_name="sas" ;


        $wpdb->insert( 


            $table_name,


            array( 


            'category' => '" . $column[0] . "',

            'temple' => '" . $column[0] . "'

        )
            );





    }
}
}

Я хочу импортировать csv напрямую в основную таблицу базы данных wordpress ‘sas’. CSV содержит некоторые записи со структурой таблицы, которую я создал… Но импорт не успешен.

Вы можете использовать Load data infile запрос MySQL вместо перебора каждой записи.

Документация: https://dev.mysql.com/doc/refman/8.0/en/load-data.html

Например:

$wpdb->query(
                $wpdb->prepare(
                        "LOAD DATA LOCAL INFILE %s INTO TABLE sas FIELDS TERMINATED BY ',' ENCLOSED BY %s IGNORE 1 LINES (@category,@temple) SET category = @category, temple = @temple;", $_FILES['file']['tmp_name'], '"'
                )
        );

Убедитесь, что поля из файла правильно сопоставлены с полями в базе данных. Также это будет изменяться в зависимости от форматирования вашего файла. Надеюсь, это поможет.

Примечание: Пожалуйста, проверьте наличие синтаксических ошибок/опечаток, код не проверялся и не тестировался.

Ответ или решение

Ввод данных из CSV в таблицу базы данных: Решение проблемы

Импорт данных из CSV файлов в базу данных — достаточно распространённая задача, особенно в контексте работы с WordPress. Однако иногда этот процесс может вызывать сложности, как в вашем случае. Давайте разберём возможные причины неудачи и рассмотрим альтернативные решения.

1. Проверка вашего кода

Ваш текущий код содержит некоторые ошибки, на которые следует обратить внимание:

  • Обработка данных: Строки, которые вы вставляете в таблицу, обрамлены кавычками, что может привести к проблемам при вставке. Вместо этого используйте правильное форматирование и экранирование данных:
    'category' => $column[0],
    'temple' => $column[1]  // предполагается, что второй элемент массива csv - temple
  • Ошибки при вставке: Если данные не вставляются, попробуйте использовать метод print_r($wpdb->last_error) после вызова $wpdb->insert() для получения информации об ошибке.

2. Загрузка данных с помощью LOAD DATA INFILE

Если вы стремитесь оптимизировать процесс импорта, вы можете использовать LOAD DATA INFILE. Этот метод быстрее и эффективнее, особенно для больших файлов. Замените цикл на следующий код:

global $wpdb;

if (isset($_POST["import"])) {
    $fileName = $_FILES["file"]["tmp_name"];

    if ($_FILES["file"]["size"] > 0) {
        $wpdb->query(
            $wpdb->prepare(
                "LOAD DATA LOCAL INFILE %s INTO TABLE sas FIELDS TERMINATED BY ',' ENCLOSED BY '\"' IGNORE 1 LINES (@category, @temple) SET category = @category, temple = @temple;",
                $_FILES['file']['tmp_name']
            )
        );

        if ($wpdb->last_error) {
            // Отладочная информация
            echo "Ошибка: " . $wpdb->last_error;
        } else {
            echo "Импорт успешен!";
        }
    } else {
        echo "Файл пуст!";
    }
}

3. Подготовка CSV файла

Убедитесь, что ваш CSV файл правильно отформатирован:

  • Правильные разделители: Убедитесь, что разделитель столбцов соответствует тому, который вы используете в запросе (обычно это запятая).
  • Заголовки: Если вы используете IGNORE 1 LINES, убедитесь, что первая строка содержит заголовки, которые соответствуют порядку данных в файле.

4. Проверьте настройки сервера

Некоторые настройки сервера могут блокировать операции с файлами:

  • Убедитесь, что параметр local_infile включен в настройках MySQL. Это можно проверить с помощью следующего SQL-запроса:
    SHOW VARIABLES LIKE 'local_infile';
  • Если он отключен, его можно включить, добавив строку local_infile=1 в конфигурационный файл MySQL (обычно my.cnf или my.ini) и перезапустив сервер.

5. Обработка ошибок и отладка

  • Используйте функцию error_log() для логгирования ошибок во время выполнения скрипта, чтобы иметь возможность анализировать проблемы позже.
  • Тестируйте импорт на небольших файлах, чтобы быстро отладить процесс.

Следуя этим шагам, вы сможете значительно улучшить процесс импорта CSV в таблицы базы данных WordPress и устранить возникшие проблемы. Убедитесь, что вы проверяете все аспекты, начиная от формата файла до настроек сервера, чтобы избежать возможных ограничений, влияющих на успешность операции.

Оцените материал
Добавить комментарий

Капча загружается...