【问题标题】:Insert array to to single MySQL raw with foreach使用 foreach 将数组插入到单个 MySQL raw
【发布时间】:2016-09-29 08:55:52
【问题描述】:

我需要将 MySQL 数据从数组值插入到单个原始数据中。我尝试了下面的代码,但出现错误:警告:内爆():传入的参数无效 我怎么解决这个问题?或者有没有其他方法可以使用 PHP 将数组值插入 MySQL 中的单个 raw?

<?php

foreach ($_POST['qty'] as $product_id => $qty) {
$product_id = implode(" ",$product_id);
$qty = implode(" ",$qty);
}
$q = mysqli_query($conn, "INSERT INTO product_order (product_id,qty) VALUES ('$product_id','$qty')");

?>

【问题讨论】:

  • 您是否要在数据库中保存逗号分隔值?
  • 是的。对……
  • 请不要那样做。这是个坏主意。您会在这里找到成千上万的人提出的问题,这些问题来自那些这样做并在那里挣扎的人。
  • liakat.skype 这是我的Skype。请加我。我想向你展示我的数据库结构。我不知道在没有逗号的情况下将其保存到数据库

标签: php mysql


【解决方案1】:

Implode 函数的第二个参数接受数组,所以首先检查 implode 函数的第二个参数是数组。

foreach ($_POST['qty'] as $product_id => $qty)

这一行说$product_id 是键,它不是数组,所以内爆函数应该不起作用。

请提供$_POST['qty']dump

【讨论】:

    【解决方案2】:

    试试这个:

    <?php
     $product = [];
     $qtys = [];
    if(!empty($_POST['qty'])){
    foreach ($_POST['qty'] as $product_id => $qty) {
       array_push($product, $product_id);
       array_push($qtys, $qty);
    }
     $qty_final = implode(',',$qtys);
     $product_id_final = implode(',',$product);
     $q = mysqli_query($conn, "INSERT INTO product_order (product_id,qty) VALUES ('$product_id_final','$qty_final')");
    }
    

    在 db 中保存逗号分隔值是非常糟糕的主意。

    【讨论】:

    • 我不想用逗号保存,但我不知道如何管理订单,这就是为什么这样做。我可以有你的 Skype 吗?我可以在那里分享我的 sql 表图片
    • @KevinHeimlich 你试过我上面的方法了吗。它对你有用吗?对于没有逗号,您需要创建另一个表并相应地存储 ID。
    • 是的。我可以得到你的 Skype id 吗?我想给你看点东西...请帮忙
    • @KevinHeimlich 无论您想展示什么,都可以将其附加到问题中。
    • 附上我的桌面截图。检查那里的产品我有一个原始的。我如何在那里保存多个产品 ID?
    【解决方案3】:

    这不是一个好主意。 - 这是一个非常糟糕的主意。

    话虽如此。你的 $product_id 不是一个数组 - 它是一个数组键(stringinteger),所以没有什么可以内爆的。

    与其将 csv 插入此表,不如为您拥有的每个 id 插入新行。

    【讨论】:

      【解决方案4】:

      试试这个:

      <?php
      
      $product_data = isset(($_POST['qty'])? ($_POST['qty']: array();
      
      if ( !empty($product_data) ){
      
          $sql = "INSERT INTO product_order (product_id, qty) VALUES ('".implode(", ", array_keys($product_data))."','".implode(", ", array_values($product_data))."')";
      
          $q = mysqli_query($conn, $sql);
      
      }
      ?>
      

      【讨论】:

        【解决方案5】:

        如果你想将数组发布到数据库然后使用php序列化函数。最好是数组类型的数据

            $serialized_data = serialize(array('Math', 'Language', 'Science'));  
        echo  $serialized_data . '<br>';
        

        【讨论】:

          【解决方案6】:

          你可以,

          <?php
          $product_data = isset(($_POST['qty'])? ($_POST['qty']: array();
          if ( !empty($product_data) ){
              $sql = "INSERT INTO product_order (product_id, qty) VALUES ('".implode(", ", array_keys($product_data))."','".implode(", ", array_values($product_data))."')";
              $q = mysqli_query($conn, $sql);
          }
          ?>
          

          这应该可行。

          但是在字段中保留逗号分隔的列表并不是一件好事。您可以有一个新表,以便您可以映射到哪些产品按什么顺序排列。

          【讨论】:

            猜你喜欢
            • 2010-12-21
            • 1970-01-01
            • 2023-03-13
            • 2019-10-23
            • 2013-05-05
            • 2015-06-16
            • 2012-06-19
            • 2015-12-18
            • 1970-01-01
            相关资源
            最近更新 更多