Написание PHP-файла для чтения из CSV и выполнения SQL-запроса

Я хотел бы, чтобы PHP-скрипт читал содержимое из файла CSV в следующем формате

id, sku 1,104101 2,105213 

есть в общей сложности 1486 записей, я считаю, что лучше использовать цикл for, а не время! EOF.

После этого я хотел бы выполнить SQL-запрос в базе данных с именем m118, table catalog_product_entity.

Запрос будет выглядеть как UPDATE sku = $ csvSku WHERE id = $ csvId

Будучи новичком в PHP и MySQL, я не знаю, с чего начать кодирование.

fgetcsv может использоваться для разбора CSV-файлов. Метод mysql_query может использоваться для выполнения запросов MySQL.

Полный код выглядит следующим образом:

 <?php $fin = fopen('catalog_product_entity.csv','r') or die('cant open file'); $link = mysql_connect('localhost', 'm118', 'pw'); If (!$link) { die ('Could not connect: ' . mysql_error()); } @mysql_select_db('m118') or die ('Unable to select database'); echo "Connection succeeded <br />\n"; while (($data=fgetcsv($fin,1000,","))!==FALSE) { $query = "UPDATE catalog_product_entity SET sku='$data[1]' WHERE entity_id='$data[0]'"; mysql_query($query); echo "Record updated <br />\n"; } fclose($fin); mysql_close(); ?> 

Хорошо сделано по обучению 🙂

Возможно, вам стоит узнать о PDO в PHP, так как это (на мой взгляд) лучший, самый безопасный и быстрый способ выполнения MySQL-запросов в PHP:

 <?php $fin = fopen('catalog_product_entity.csv','r') or die('cant open file'); try { $link = new PDO('mysql:dbname=m118;host=localhost', 'm118', 'pw'); echo 'Connection succeeded <br />' . PHP_EOL; $stmt = $db->prepare('UPDATE catalog_product_entity SET sku = :sku WHERE entity_id = :id'); //Only give the length parameter if you **KNOW** that no line will be longer than that while (($data=fgetcsv($fin,1000,","))!==FALSE) { if ($stmt->execute(array(':sku' => $data[1], ':id' => $data[0]))) { echo 'Record updated <br />' . PHP_EOL; } else { $err = $stmt->errorInfo(); echo 'Update Failed: ' . $err[2] . PHP_EOL; } } } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); } fclose($fin); 

Скрипт PDO имеет следующие преимущества по сравнению с вашими:

  • Это безопаснее: PDO автоматически цитирует вставленные данные по мере необходимости. Это предотвращает атаки SQL-инъекций.
  • Это быстрее: PDO кэширует запрос (в процессе подготовки), а затем использует параметры, переданные в execute.
  • Он переносится: PDO может подключаться к различным типам БД, а не только к MySQL, поэтому, если вам нужно переключать DB, это намного проще.

Вам нужно будет сделать что-то вроде:

 $filename = "file_name_on_server.csv" $fp = fopen( $filename ,"r"); while ($line = fgets ($fp)) { 

теперь используйте Split для получения массива значений с разделителями-запятыми

  $arr = split (",", $line); 

Теперь у вас есть массив для значений с разделителями-запятыми в строке $. Вы можете сделать простое форматирование строк, чтобы вставить эти значения в запрос SQL.

  $query = "INSERT INTO `TableBlah` (Field1, Field2) VALUES (" . $arr[0] . "," . $arr[1] . ")"; 

Используйте mysql api для отправки этих запросов в базу данных

 } fclose($fp); 

Ок, человек, я не буду писать код для вас, потому что вы не узнаете, если я это сделаю. Но я укажу вам в правильном направлении. Ознакомьтесь с этой ссылкой http://us.php.net/fgetcsv для получения информации о разборе CSV-файла в PHP. Простой поиск Google также должен предоставить вам необходимую информацию о вводе его в таблицу MySQL.

Goblyn27 верен. Взгляните на fgetcsv () и mysql_query () на php.net. В документах есть примеры для того, как это сделать.

 <?php include ("dbsanjog.php"); $uploadedfile=$_REQUEST['uploadedfile']; $target_path = "dataupload/"; $user=$_REQUEST['username']; $target_path = $target_path.$user.".csv"; if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { echo "The file ". basename( $_FILES['uploadedfile']['name']). "has been uploaded"; } //echo $target_path; die; //$row = 1; $handle = fopen($target_path, 'r'); //$sql="update agents_det set where user='$user'"; while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $query = "UPDATE agents_det SET contact='$data[3]' WHERE user='$user'"; } fclose($handle); //mysql_query($test); //echo ($test[1]); die; //echo $test; die; ?>