【问题标题】:insert data from html table to mysql从html表中插入数据到mysql
【发布时间】: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 语句中应该是什么样子吗?

标签: php mysql


【解决方案1】:

我认为这会奏效

$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)) {
        $statement = $connect->prepare("UPDATE product_details  SET title = '$title'
        WHERE sku = '$data' AND lang_id = '$lang_id'");

        if (!$statement->execute()) {
            $error = 'None or part of the data was updated';
        }
    }
}
echo $error ?? 'Data Updated Successfully';

【讨论】:

  • 目前我得到输出:“注意:第 21 行 import_update_title_csv.php 中数组到字符串的转换第21行import_update_title_csv.php中的转换注意:第22行import_update_title_csv.php中数组到字符串的转换注意:第22行import_update_title_csv.php中数组到字符串的转换数据更新成功”
  • 但我检查数据库和记录仍然没有更新
  • 在第 21 行和第 22 行我有: LINE21$statement = $connect->prepare("UPDATE product_details SET title = '$title' LINE22WHERE sku = '$data' AND lang_id = '$lang_id'");
  • 我的错。不需要将 $data 作为数组。让我编辑我的代码并将 $data[] 更改为 $data。
  • 是的,行 CSV prnt.sc/A5ISregFc8U4 和表格 html 映射 prnt.sc/L842IpjVhE5E
猜你喜欢
  • 2017-05-16
  • 1970-01-01
  • 1970-01-01
  • 2013-10-17
  • 1970-01-01
  • 1970-01-01
  • 2019-01-12
  • 2014-06-21
  • 1970-01-01
相关资源
最近更新 更多