Вопрос или проблема
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 и устранить возникшие проблемы. Убедитесь, что вы проверяете все аспекты, начиная от формата файла до настроек сервера, чтобы избежать возможных ограничений, влияющих на успешность операции.