Magento:LOAD DATA LOCAL INFILE无效

时间:2015-09-29 18:22:42

标签: magento

尝试通过LOAD DATA LOCAL INFILE将CSV插入表格。它不显示错误,但表为空(CSV不为空)。有一个解决方法做foreaches和手动插入,但它比LOAD DATA INFILE慢得多。

有什么建议吗?

$resource = Mage::getSingleton('core/resource');
$write = $resource->getConnection('core_write');

$filename = Mage::getBaseDir()."/var/mdb_processed/parts.csv";
$query = <<<eof
    LOAD DATA LOCAL INFILE '$filename'
 INTO TABLE ppi_parts
 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' lines terminated by '\n'
 ignore 1 lines
(partID,sku,isFreight,quantity,price,lastCost,vwCode,shortDesc,longDesc,headline,consumerDesc,salesMessage,relatedProd1,relatedProd2,weight,oversized,corePrice,titleMetaDescription,metaKeywords,fits,notes,seoField,location)
eof;


$write->query($query);

2 个答案:

答案 0 :(得分:0)

或者PDO版本:

$options = array(PDO::MYSQL_ATTR_LOCAL_INFILE => true);
$local = simplexml_load_file(Mage::getBaseDir() . "/app/etc/local.xml");
$connection = $local->global->resources->default_setup->connection;
$pdoDb = new PDO(
    "mysql:host={$connection->host};dbname={$connection->dbname}", 
    $connection->username, 
    $connection->password, 
    $options
    );

$path_to_datafile = Mage::getBaseDir()."/var/mdb_processed/parts.csv";

$sql = "LOAD DATA LOCAL INFILE '{$path_to_datafile}'
        REPLACE INTO TABLE ppi_parts
        FIELDS TERMINATED BY ','
        OPTIONALLY ENCLOSED BY '\"' 
        LINES TERMINATED BY '\\n'
        IGNORE 1 LINES;";

$result = $pdoDb()->exec($sql);

答案 1 :(得分:-1)

我通过手动连接到数据库来解决它。由于某些原因,Varien DB对象无法正常工作。

要创建手动连接,我必须这样做:

$local = simplexml_load_file( Mage::getBaseDir()."/app/etc/local.xml");

$connection = $local->global->resources->default_setup->connection;
$filename = Mage::getBaseDir()."/var/mdb_processed/parts.csv";

$link = mysql_connect($connection->host,$connection->username,$connection->password);
mysql_select_db($connection->dbname, $link) or die('Could not select database.');

然后:

$query = <<<eof
        LOAD DATA LOCAL INFILE '$filename'
     INTO TABLE ppi_parts
     FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' lines terminated by '\n'
     ignore 1 lines
    (partID,sku,isFreight,quantity,price,lastCost,vwCode,shortDesc,longDesc,headline,consumerDesc,salesMessage,relatedProd1,relatedProd2,weight,oversized,corePrice,titleMetaDescription,metaKeywords,fits,notes,seoField,location)
eof;
mysql_query($query);

完美无缺。