2009-06-02 10 views
7

me gustaría un script PHP para leer el contenido de un archivo CSV en el siguiente formatoCreación de un archivo PHP para leer desde CSV y ejecutar consultas SQL

id, sku 
1,104101 
2,105213 

hay un total de 1486 entradas, creo que es mejor usar un bucle for en lugar de while! EOF.

Después de eso, me gustaría realizar una consulta SQL en una base de datos llamada m118, table catalog_product_entity.

La consulta sería como ACTUALIZACIÓN SKU = $ csvSku donde id = $ csvId

ser un novato, tanto en PHP y MySQL, no sé por dónde empezar la codificación.

Respuesta

9

fgetcsv se puede utilizar para analizar los archivos CSV. El método mysql_query se puede usar para realizar consultas MySQL.

El código completo es el siguiente:

<?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(); 
?> 
+2

Oye ... mira eso, lo resolviste;) – RedBlueThing

+0

Pasar de 0 a escribir ese código es un buen logro. Felicitaciones. –

+0

Gracias Cannonade y Goblyn. ¡Siempre se siente bien aprender algo nuevo! – segfault

1

Muy bien, no escribiré el código porque no aprenderá si lo hago. Pero te señalaré en la dirección correcta. Consulte este enlace http://us.php.net/fgetcsv para obtener información sobre cómo analizar un archivo CSV en PHP. Una simple búsqueda en Google también debería proporcionarle la información necesaria para ingresarla en una tabla MySQL.

+0

Hola, gracias, de hecho, me he dado cuenta. Se dio cuenta de que PHP es bastante simple. – segfault

0

Goblyn27 es correcto. Eche un vistazo a fgetcsv() y mysql_query() en php.net. Incluso hay ejemplos en los documentos sobre cómo hacer esto.

2

Usted tendrá que hacer algo como:

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

ahora utilizar Split para obtener una matriz de los valores delimitados por comas

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

Ahora tiene una matriz de los valores delimitado por comas en $ línea. Puede hacer un formato de cadena simple para pegar esos valores en una consulta SQL.

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

Utilice la mysql api para enviar las consultas a la base de datos

} 
fclose($fp); 
3

Bien hecho en el aprendizaje :)

Debe quizás ahora aprender sobre PDO en PHP, ya que es (en mi opinión) el mejor, más segura y forma más rápida de ejecutar consultas de MySQL en 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); 

El guión DOP tiene las siguientes ventajas sobre la suya:

  • Es más seguro: PDO cita automáticamente los datos que se insertan según sea necesario. Esto evita ataques de inyección SQL.
  • Es más rápido: PDO almacena en caché la consulta (en la preparación) y luego utiliza los parámetros que se pasan en execute.
  • Es portátil: PDO se puede conectar a varios tipos de base de datos, no solo a MySQL, por lo que si necesita cambiar de base de datos, es mucho más fácil.
0
<?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; 


?> 
Cuestiones relacionadas