2012-03-28 26 views
0

Normalerweise würde ich ein für einen MySQL-Datenbank-Eintrag in PHP für jede Schleife hinzufügen, aber wenn alle Informationen in einem Array (mehrdimensionale ich denke?)PHP/Mysql setzt Array in mysql Db

I‘ m Verwenden http://www.phpclasses.org/quick_csv_import, um eine CSV-Datei analysieren, die gut funktioniert, aber ich kann nicht für das Leben von mir erarbeiten, wie Sie die Ergebnisse, wie sie in einer Schleife in die Datenbank schreiben, setzen.

<?php 

$con = mysql_connect("localhost","*****","****"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

    mysql_select_db("*****", $con); 

require_once('parsecsv.lib.php'); 
$csv = new parseCSV(); 
$csv->auto('prod2.csv'); 

$csv->titles as $value (this has the titles saved in it in an array) 

$csv->data as $key => $row (this has the actual values in it in an array) 


?> 

Edit: Das Array wie folgt aussieht:

[0] => Array 
     (
      [ProductCategory] => Cleats and Spikes 
      [ProductSubCategory] => Masters Cleats 
      [Brand] => Masters 
      [ItemNumber] => SAM02BY 
      [ShortCode] => SAM0 
      [ItemDescription] => Ultra Grip F/T Pk (16) Blk/Yel 
      [ProductName] => Ultra Grip (6mm, F/T, Q/F)                                                          
      [Options] => Fast Twist 
      [ImageURL] => hSAM02BY.jpg 
      [YoutubeURL] => http://www.youtube.com/watch?v=WuSB6rY9myg 
      [HostedURL] => 27527890 
      [StockStatus] => In Stock 
      [QtyAvailable] => 2149 
      [RRP] => 8.99 
      [Barcode] => 5027084199630 
      [DeliveryDue] => 09/03/2012 
     ) 

wird Irgendwelche Tipps stark

+0

Also, was haben Sie versucht? Alles, was Sie tun müssen, ist ein Looping-Konstrukt, um über $ csv-> data zu iterieren. Sie können sie dann entweder einzeln in Ihre Schleife einfügen oder eine große Abfrage erstellen und am Ende einfügen. – nnichols

+0

Zeigen Sie das Ergebnis von 'print_r ($ csv-> data)', damit wir seine Struktur sehen können. – MrCode

+0

Ich habe die Frage mit dem Druck aktualisiert. Danke – TMB87

Antwort

2

geschätzt werden würde ich die Daten direkt in MySQL laden mit LOAD DATA INFILE -

LOAD DATA INFILE 'prod2.csv' INTO TABLE tbl_name 
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
    LINES TERMINATED BY '\r\n' 
    IGNORE 1 LINES; 

Dies setzt voraus, dass Sie sich angewählt haben Berechtigungen auf dem Server. prod2.csv müsste mit dem vollständigen Pfad zu der Datei auf dem Server ersetzt werden.

Um die CSV in PHP verarbeiten Sie so etwas wie diese verwenden könnte -

<?php 

$dsn = 'mysql:dbname=testdb;host=127.0.0.1'; 
$user = 'dbuser'; 
$password = 'dbpass'; 

try { 
    $dbh = new PDO($dsn, $user, $password); 
} catch (PDOException $e) { 
    echo 'Connection failed: ' . $e->getMessage(); 
} 

$sql = 'INSERT INTO `table` (ProductCategory, ProductSubCategory, Brand, ...) 
     VALUES (?,?,?, ...) 
     ON DUPLICATE KEY UPDATE ProductCategory = VALUES(ProductCategory), ProductSubCategory = VALUES(ProductSubCategory), Brand = VALUES(Brand), ...'; 

$sth = $dbh->prepare($sql); 

require_once 'parsecsv.lib.php'; 
$csv = new parseCSV(); 
$csv->auto('prod2.csv'); 

foreach ($csv->data as $row) { 

    // bind params and execute query 
    $sth->execute(array($row['ProductCategory'], $row['ProductSubCategory'], $row['Brand'])); 

} 

Es ist offensichtlich unvollständig, da Sie nicht die Details der Tabellen enthalten sind, beteiligt. Ich würde empfehlen, LOAD DATA INFILE zu verwenden, wenn Sie können, aber das wird funktionieren, sobald Sie die Lücken ausgefüllt haben. Beachten Sie, dass ich dieses Beispiel mit PDO anstelle der alten mysql_ * -Funktionen geschrieben habe. Die wiederholte Ausführung der Abfrage wird aufgrund der vorbereiteten Anweisung leicht verbessert.

+0

+1. Wenn Sie das FILE-Privileg auf dem Server nicht haben, können Sie stattdessen "LOAD DATA LOCAL INFILE" verwenden. – Daan

+0

Hey, danke dafür. Allerdings möchte ich es über PHP mit einem Cron tun, da es oft und auf Shared-Hosting ausgeführt werden muss – TMB87

+0

Haben Sie überprüft, ob Ihre gemeinsame Hosting-Umgebung LOAD DATA INFILE erlaubt? Verwenden Sie Barcode als eindeutigen Bezeichner? Was ist die Tabellenstruktur, die Sie aktualisieren? Auch wenn Sie es stündlich von cron aus tun möchten, würde ich trotzdem LOAD DATA INFILE wählen, wenn es Ihnen zur Verfügung steht, da es schnell geht. – nnichols

0

Ich habe gerade ein für jede Schleife auf dem einzeln pro Element im Array $ unabhängig von [ ‚item‘] etc