У меня есть несколько CSV-файлов, создаваемых каждый день с одним и тем же именем, и их следует импортировать в базу данных Mysql. Я могу импортировать один файл в таблицу, где я определил CSV-файл и имя таблицы перед импортом, но как сопоставить CSV-файл с именами таблиц и импортировать их. вот мой код:
$conn = mysqli_connect($servername, $username, $password);
// Check connection
if (mysqli_connect_error()) {
echo "Connection failed!!!".mysqli_connect_error();
exit();
}
else{
echo "Connected successfully \n";
}
$serverDir = $_SERVER['DOCUMENT_ROOT'];
//$filename = "OwlertonGreenIN.CSV";
echo getcwd();
print_r($filename);
//$table_name = strtolower( $filename );
//$filename = "$serverDir.$filename";
if (($handle = fopen($filename, 'r'))!== FALSE)
while (($data = fgetcsv($handle, 1000, ";"))!== FALSE)
{
// print_r($data);
$import="INSERT into table name (`camera_name`,`plate`) values(`camera_name`,`plate`)";
}
Решение проблемы
Я бы использовал это:
$tablename = pathinfo($filename, PATHINFO_FILENAME);
Подготовьте оператор INSERT с заполнителями:
$import="INSERT INTO `{$tablename}` (`camera_name`,`plate`) VALUES(?,?)";
$stmt = $conn->prepare($import);
Имя таблицы должно быть заключено в обратные кавычки, потому что вы не знаете, содержит ли оно пробелы, знаки препинания или зарезервированное ключевое слово SQL.
Затем выполните этот подготовленный оператор для каждой строки, которую вы читаете из CSV-файла.
while (($data = fgetcsv($handle, 1000, ";"))!== FALSE)
{
$stmt->bind_param('ss', $data[0], $data[1]);
$stmt->execute();
}
Это может работать довольно медленно, вставляя по одной строке за раз. Возможно, вам будет интересно прочитать мою презентацию «Быстрая загрузка данных! ». дополнительные советы по повышению производительности.
Комментариев нет:
Отправить комментарий