2012-03-28 35 views
0

通常我会添加每个循环在PHP MySQL数据库的条目,但是当所有的信息在一个阵列(多维怎么想吗?)PHP/MySQL的将阵列中的MySQL数据库

我m使用http://www.phpclasses.org/quick_csv_import来解析一个工作正常的CSV文件,但是我不能在我的生活中找出如何将结果写入循环以写入数据库。

<?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) 


?> 

编辑:阵列看起来像:

[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 
     ) 

任何提示,将不胜感激

+0

那么,你有什么试过?你所需要做的就是使用一个循环结构遍历'$ csv-> data'。然后,您可以将它们逐个插入到循环中,或创建一个大型查询并在最后插入。 – nnichols 2012-03-28 16:44:20

+0

显示'print_r($ csv-> data)'的结果',以便我们可以看到它的结构。 – MrCode 2012-03-28 16:46:22

+0

我已经更新了打印的问题。谢谢 – TMB87 2012-03-28 18:30:26

回答

2

我将使用直接加载数据到MySQL 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; 

这假定你有appropr在服务器上处理权限。 prod2.csv需要替换为服务器上文件的完整路径。

在PHP处理CSV你可以使用这样的事情 -

<?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'])); 

} 

这显然是不全面的您还没有涉及的表的细节。如果可以的话,我会建议使用LOAD DATA INFILE,但是一旦填满了空格,这将起作用。请注意,我已经使用PDO而不是旧的mysql_ *函数编写了此示例。由于准备好的陈述,查询的重复执行会略有改进。

+0

+1。如果您在服务器上没有FILE权限,则可以使用“LOAD DATA LOCAL INFILE”。 – Daan 2012-03-28 17:03:34

+0

嘿,谢谢你。但是我确实希望通过PHP使用cron来完成它,因为它必须经常运行并在共享主机上运行 – TMB87 2012-03-28 18:30:55

+0

您是否检查过您的共享主机环境是否允许LOAD DATA INFILE?你使用条形码作为唯一标识符吗?什么是你正在更新的表结构?即使你想从cron每小时做一次,我仍然会选择LOAD DATA INFILE,如果它对你可用,因为它很快。 – nnichols 2012-03-28 18:35:56

0

我只是做了每个循环的数组中的个人物品$ whatever ['item']等