用于解析CSV文件输入到DB的嵌套php循环- SQL插入语句在任意周期失败


Nested php loops used to parse CSV file input into DB - SQL insert statement fails at arbitrary cycle

我有一个问题,我正在写一个函数,其中我采取一个大的csv文件,并将其输入到一个数组2d数组。

从包含各种记录的数据库表导出的csv文件,

函数执行的步骤如下:

//A. get temporary file path
//B. place file into array as a long string
//C. parse string into array based on rows ('r)
//D. parse row strings into arrays for columns (,)

//1. Query db for price codes
//1.1 Loop through CSV top row to find price code x axis position
//2. Loop through price codes SQL
    //2.1 Loop through price codes column from CSV file
        //2.1.1 IF match price code
            //2.1.2 Check if id match on price list array
                //2.1.3 Add record to prices table
                        //Success
                        //Failure (this could kill the loop maybe)
//3. Close loops and close sql connection

价格代码是与价格适用的地理区域有关的代码。

函数循环遍历数据库中的所有价格代码

在价格代码循环中,子循环筛选csv数组,查找与当前循环匹配的价格代码的记录。

当找到匹配项时,输入到数据库

代码如下:点击查看代码

我在循环的每一步都输出调试文本,看看是否一切都执行成功。

循环执行正确-然而,由于某些未知的原因,在某个点之后,mysqli查询不再向数据库添加进一步的记录。

怎么会这样?即使它没有给出错误,并且输出到页面的SQL查询字符串看起来完好无损。

考虑运行纯SQL,将所有数据块,csv_arrayonPriceList上传到MySQL临时表中(如果它们定期更改则定期清理),并运行一个SQL查询,避免嵌套的foreach循环和if逻辑。

你可以很容易地上传csv数据到MySQL在一个调用使用LOAD DATA INFILE(或插入PHP迭代):

LOAD DATA INFILE '/path/to/csv/file.csv' 
INTO TABLE csvdata
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY ''r'n';

然后,运行一个简单的追加查询(调整下面以与实际的表和字段名称对齐,因为屏幕截图没有显示):

INSERT INTO prices (PriceCode, SellingPrice, StockCode)
SELECT c.priceCodePosition, c.pricePosition, c.model_idPosition
FROM csvdata c
INNER JOIN pricecodes p
   ON c.model_idPosition = p.Code
WHERE c.model_idPosition IN (SELECT p.prices FROM onPriceList)

如果您需要捕获与逻辑不匹配的记录(正如您需要使用echo语句一样),请运行对立语句(它将是未追加的记录):

SELECT c.priceCodePosition, c.pricePosition, c.model_idPosition
FROM csvdata c
LEFT JOIN pricecodes p
   ON c.model_idPosition = p.Code
WHERE c.model_idPosition IS NULL 
   OR c.model_idPosition NOT IN (SELECT p.prices FROM onPriceList)