Пытаюсь импортировать csv не через phpmyadmin а через php запрос. Мне предложили вот такой вариант (LOAD DATA INFILE на хостинге закрыт)
$connection = @mysql_connect($host, $user, $pswd)
or die(mysql_error());
$dbs = @mysql_select_db($database, $connection) or
die(mysql_error());
$nam="test.csv";
$separator=";";
$fop = fopen($nam , "r+");
$i=0;
while (!feof($fop))
{
$read = fgets($fop, 3000);
list($id, $name_group, $name, $price, $remainder, $description) = split($separator ,$read);
mysql_query("INSERT INTO test FROM dbtest SET `id`='".$id."', `name_group`='".$name_group."', `name`='".$name."', `price`='".$price."', `remainder`='".$remainder."', `description`='".$description."' ");
$i++;
}
fclose($fop);
echo "Импортировано в базу записей: ".$i;
?>
В итоге скрипт пишет, что импортировано правильное количество записей, но база пустая. Никаких ошибок на хостинге в логах нет. Как понять почему не записываются данные?
У вас ошибка в sql запросе.
INSERT INTO test FROM dbtest SET `id`='".$id."'
Формат запроса на вставку в базу следующий:
INSERT INTO table_name (column1, column2) VALUES (value1, value2)
Я бы предложил не много переписать код используя PDO и стандартную функцию PHP для чтения csv файлов, например вот так:
$host = 'localhost';
$db_name = 'test';
$db_user = 'root';
$db_passwd = '';
$file = 'test.csv';
$delimiter = ',';
$verbose = true;
try {
$db = new PDO("mysql:host=$host;dbname=$db_name", $db_user, $db_passwd, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
$stmt = $db->prepare("INSERT INTO my1 (`id`, `name_group`, `name`, `price`, `remainder`, `description`) VALUES (?, ?, ?, ?, ?, ?) ");
if (!file_exists($file)){
throw new Exception("File $file not found!");
}
$f = fopen($file, 'r+');
$data = array();
while($data[]=fgetcsv($f, 0, $delimiter)){}
if (empty($data)) {
throw new Exception("Empty data. Check the source file.");
}
$i=0;
foreach ($data as $entry) {
if (!is_array($entry) || empty($entry[0])) {
continue;
}
if ($verbose){
print "\nProcessing entry ID: ". $entry[0];
}
$stmt->execute($entry);
$i++;
}
print "\n\n$i rows were successfully processed";
}
catch (Exception $e){
print "Error: " . $e->getMessage();
}
Исходный csv-файл:
1,group_1,name_1,400,,description_1
2,group_2,name_1,500,,description_2
3,group_3,name_1,600,,description_3
4,group_4,name_1,400,,description_4
5,group_5,name_1,500,,description_5
Результат:
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Возможно ли организовать модель доменных событий используя возможности ZF-EventManager?
Есть два input'а, я хочу ввести туда числа и в третьем получить результат деленияГде ошибка? Результат не выводится