【问题标题】:How to insert multiple records to MySQL如何向 MySQL 中插入多条记录
【发布时间】:2014-03-15 16:28:53
【问题描述】:

我有带购物车的小页面。一切都是在会话中存储。现在我需要将这些数据保存到 mysql 数据库中。

我认为,我需要使用 foreach 循环来执行此操作,但我无法构造它。有人知道解决方案吗?

这是显示购物车的功能。

function showCart() {
    global $db;
    $cart = $_SESSION['cart'];
    if ($cart) {
        $items = explode(',',$cart);
        $contents = array();
        foreach ($items as $item) {
            $contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1;
        }
        $output[] = '<form action="cart.php?action=update" method="post" id="cart">';
        $total=0;
        $output[] = '<table>';
        foreach ($contents as $id_menu=>$qty) {
            $sql = 'SELECT * FROM menu WHERE id_menu = '.$id_menu;
            $result = $db->query($sql);
            $row = $result->fetch();
            extract($row);
            $output[] = '<tr>';
            $output[] = '<td><a href="cart.php?action=delete&id_menu='.$id_menu.'" class="r">Delete</a></td>';
            $output[] = '<td>' .$name. '</td>';
            $output[] = '<td>' .$price.' Kč</td>';
            $output[] = '<td><input type="text" name="qty'.$id_menu.'" value="'.$qty.'" size="5" maxlength="5" /></td>';
            $output[] = '<td>' .($price * $qty).' Kč</td>';
            $total += $price * $qty;

            $output[] = '</tr>';
        }
        $output[] = '</table>';
        $output[] = '<p>Total: <strong>'.$total.' EUR</strong></p>';
        $output[] = '<div><button type="submit">Update</button></div>';
        $output[] = '</form>';
    } else {
        $output[] = '<p>Cart is empty.</p>';
    }
    return join('',$output);
}

【问题讨论】:

  • 您到底想在数据库中存储什么? $name $price $qty $total ???还是别的什么????
  • 你是对的,它可能是一个循环,用于保存要插入的项目的任何变量。所以首先看一下将要插入的数据的存储位置和方式。然后转到 SO 上关于在 MySQL 中插入多行的现有问题之一,例如 this one,如果您仍有问题,请使用 relevant 代码提出更具体的问题。
  • @Cyber​​Boy 是的,$name $price $qty

标签: php mysql database session


【解决方案1】:

我认为你需要这样的东西......

    foreach ($contents as $id_menu=>$qty) 
    {
    $sql1 = 'INSERT INTO tablename (colum1, colum2, column3, ... ) SELECT * FROM menu WHERE id_menu = '.$id_menu;
    //rest  of your program
    }

【讨论】:

  • 是的,就是这个!非常感谢!
【解决方案2】:

你可以使用:

Insert into mytable SELECT * FROM menu WHERE id_menu = ...

要在一个语句中构造多个插入和全部插入,请执行以下操作:

Insert into mytable (col1, col2, col3) values
('Val1a','val2a','val3a'),
('Val1b','val2b','val3b'),
('Val1f','val2d','val3c'),
Etc...
;

每次迭代都会连接一行值。然后在循环之后完成插入。

【讨论】:

  • 感谢您的回复,我知道如何向表中插入数据,但我想使用 foreach 插入所有记录。
  • 在我的回答中添加了批量插入
猜你喜欢
  • 2016-09-01
  • 2011-10-26
  • 2015-10-04
  • 1970-01-01
  • 2012-12-16
  • 2015-05-10
  • 2015-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多