【发布时间】:2022-11-27 12:49:23
【问题描述】:
首先我将 CSV 转换为 html 表,接下来我将 html 表中的数据发布到下面的脚本,然后将新记录插入数据库:
foreach($file_data as $row)
{
$data[] = '("'.$row[$_POST["sku"]].'", "'.$row[$_POST["stock"]].'")';
}
if(isset($data))
{
$query = "
INSERT INTO products
(sku, stock)
VALUES ".implode(",", $data)."
";
上述功能正常工作,我可以将示例 1000 条记录插入数据 mysql。
现在我需要更改此功能并更新 mysql 表。
我尝试这样的:
$file_data = $_SESSION['file_data'];
unset($_SESSION['file_data']);
foreach($file_data as $row)
{
$data[] = '("'.$row[$_POST["sku"]].'")';
$title[] = '("'.$row[$_POST["title"]].'")';
$lang_id[] = '("'.$row[$_POST["lang_id"]].'")';
}
if(isset($data))
{
$query = "
UPDATE product_details
SET title = ".implode(",", $title)."
WHERE sku = ".implode(",", $data)." AND lang_id = ".implode(",", $lang_id)."
";
$statement = $connect->prepare($query);
if($statement->execute())
{
echo 'Data Imported Successfully';
}
}
并且此更新功能有效,但仅当可用/在 CSV 文件(html 表)中发布 1 条记录时。当我尝试从 html 表(csv 文件)更新/发布示例 2 或更多记录时,无法正常工作。
我目前从上面的函数中知道,当我只发布 1 条记录时,我会得到结果:
UPDATE product_details
SET title = title1 WHERE sku = "P6951H0E3-Q12" AND lang_id = 1;
然后这个上面的查询工作。但是当我尝试发布 2 条或更多条记录时,我会得到类似这样的输出查询:
UPDATE product_details
SET title = title1 WHERE sku = "P6951H0E3-Q12" AND lang_id = 1
SET title = title2 WHERE sku = "PLD_4051/S";" AND lang_id = 1
上面的 SQL 查询永远不会工作,但是如何获得这样的结果:
UPDATE product_details SET title = "title1" WHERE sku = "P6951H0E3-Q12" AND lang_id = "1";
UPDATE product_details SET title = "title2" WHERE sku = "PLD_4051/S" AND lang_id = "1";
【问题讨论】:
-
我不认为你可以按照你正在做的方式更新多行。在 phpmyadmin 中运行两行查询,看看它是否有效。如果您向它发送两个标题、两个 SKU 和两个 ID,您是否期望它“知道”哪个标题针对哪个 SKU/ID 组合?
-
您需要在此处使用准备好的语句(好吧,几乎无处不在,包括在您的插入查询中)——您可以在循环 title、sku 和 lang_id 数组之前准备查询,并提供数组元素作为循环内的参数。
-
将 IF 语句移动到侧循环中它将起作用;
-
我知道目前我得到的结果是这样的“UPDATE products SET stock = 115 WHERE sku =“P6951H0E3-Q12”SET stock = 225 WHERE sku =“PLD_4051/S”;”但我需要得到:UPDATE products SET stock = 115 WHERE sku = "P6951H0E3-Q12";更新产品 SET stock = 225 WHERE sku = "PLD_4051/S";
-
@Mehrwarz 谢谢你的提示。你能给出一个提示来回答它在侧循环 if 语句中应该是什么样子吗?