将多行表存储到数组中以允许用户更新

时间:2018-03-29 21:11:04

标签: php mysql

我已经在这个概念上挣扎了一段时间,我希望有人可以提供帮助。如果所有值都存储在一行中,我可以查询数据库记录。我遇到的挑战是当数量值存储在多行但是使用公共密钥(例如order_id)时。我想存储到一个数组,然后将每个值分配给一个屏幕上的变量,以允许用户更新,以便我可以再次更新表。

例如,如果表格如下所示:

    id  line    part    qty
    --  ----    ----    ---
    1   1       63      2
    1   2       104     3
    1   3       54      2
    1   4       50      1

我没有成功使用以下内容来确定行数,然后尝试构建一个foreach循环来捕获数据:

    $sql = 'SELECT *, COUNT(*) as $count FROM Order_Items where order_id = ?';
    $q = $pdo->prepare($sql);
    $q->execute(array($id));
    $data = $q->fetch(PDO::FETCH_ASSOC);

    for ($x = 0; $x <= $count; $x++ {
       $var($x) = $data['qty'];
    }

如果我可以正确地将值分成数组,然后以某种方式引用它们,那么我可以执行以下操作并显示它们并轻松更新回数据库:

$var_1  = $data['63'];  // part_id = 63
$var_2  = $data['104']; // part_id = 104
$var_3  = $data['54'];  // part_id = 54
$var_4  = $data['50'];  // part_id = 50 

1 个答案:

答案 0 :(得分:0)

改变这个:

$sql = 'SELECT *, COUNT(*) as $count FROM Order_Items where order_id = ?';
$q = $pdo->prepare($sql);
$q->execute(array($id));
$data = $q->fetch(PDO::FETCH_ASSOC);

for ($x = 0; $x <= $count; $x++ {
   $var($x) = $data['qty'];
}

对于像这样有意义的事情

$sql = 'SELECT * FROM Order_Items where order_id = ?';
$q = $pdo->prepare($sql);
$q->execute(array($id));
while(false !== ($row = $q->fetch(PDO::FETCH_ASSOC))){
    echo $row['qty'];
};

<强>更新

$sql = 'SELECT * FROM Order_Items where order_id = ?';
$q = $pdo->prepare($sql);
$q->execute(array($id));
$array = [];
while(false !== ($row = $q->fetch(PDO::FETCH_ASSOC))){
    $array['line_'.$row['line']] = $row;
};

<强>更新

回答我正在寻找的内容的附加代码如下。你的回答是我理解这一切的关键:

$sql = 'SELECT * FROM Order_Items where order_id = ?';
$q = $pdo->prepare($sql);
$q->execute(array($id));
$array = [];
while(false !== ($row = $q->fetch(PDO::FETCH_ASSOC))){
    $qty['line_'.$row['line']] = $row['qty'];
};

$var_54 = $qty['line_54'];
$var_63 = $qty['line_63'];