PHP/Mysql 将数组放入 mysql Db

标签 php mysql csv multidimensional-array

通常我会为 PHP 中的 mysql 数据库条目添加一个 for every 循环,但是当所有信息都在一个数组中时(我认为是多维的?)

我正在使用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
        )

任何提示将不胜感激

最佳答案

我会使用 LOAD DATA INFILE将数据直接加载到MySQL中 -

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

这假设您在服务器上拥有适当的权限。 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_* 函数编写了此示例。由于准备好的语句,重复执行查询将稍微提高性能。

关于PHP/Mysql 将数组放入 mysql Db,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9911746/

相关文章:

php - 在 CakePHP 中反向查找 ('threaded' )?

php - 为什么 php 标签在 drupal 中没有关闭?

mysql - 从表 1 插入或替换到表 2

mysql - 如何在单行mysql laravel中搜索多个数据

mysql - 按 ID 过滤查询

java - 如何在 Java 应用程序中运行 PHP 代码?

php - 使用 Jquery 将 URL 变量传递给 PHPExcel

javascript - 从上传的 CSV 文件创建数据表

php - MySQL 数据导出后出现的保存文件对话框(使用 PHP)

linux - 在 Bash 脚本中从 CSV 中获取特定列