【问题标题】:Using for() to update multiple rows in mysql database使用 for() 更新 mysql 数据库中的多行
【发布时间】:2016-11-10 17:54:38
【问题描述】:

我正在尝试更新数据库中的多行。我计算了表中的总行数并绑定到一个变量:

$result = '32'

然后我尝试查询每一行:

for ($x = 0; $x <= $result; $x++)
{
    if ($update = $db -> prepare("UPDATE substrates SET substrate_name = ?, substrate_desc = ?, substrate_base = ?, substrate_tax = ? WHERE substrate_id = ?"))
    {
        $substrate_name = $_POST['substrate_name'];
        $substrate_desc = $_POST['substrate_desc'];
        $substrate_base = $_POST['substrate_base'];
        $substrate_tax  = $_POST['substrate_tax'];
        $substrate_id   = $x;
        $update -> bind_param('sssss', $substrate_name, $substrate_desc, $substrate_base, $substrate_tax, $substrate_id);
        if ($update -> execute() == true) {
            // Success stuff...
        } 
        else {
            // Error stuff...
        }
        $update -> close();
    }
}

我的问题是当我运行这个脚本时,表格中的每一行都填充了最后一行编辑。例如:

AAA | Aaaaa | 1.00 | 6.35
BBB | Bbbbb | 2.00 | 6.35
CCC | Ccccc | 3.00 | 6.35

变成:

CCC | Ccccc | 3.00 | 6.35
CCC | Ccccc | 3.00 | 6.35
CCC | Ccccc | 3.00 | 6.35

如何修复此脚本,以便它单独更新每一行?

【问题讨论】:

  • 你是什么意思他们每个成为编辑的最后一行?您将它们全部设置为相同的后变量,因此我希望它们都变得相同。
  • 变量没有改变。它们来自哪里,采用什么格式?

标签: php mysql for-loop


【解决方案1】:

试试这个:

for ($x = 0; $x <= $result; $x++)
{
    if ($update = $db -> prepare("UPDATE substrates SET substrate_name = ?, substrate_desc = ?, substrate_base = ?, substrate_tax = ? WHERE substrate_id = ?"))
    {
        $substrate_name = $_POST['substrate_name'][$x];
        $substrate_desc = $_POST['substrate_desc'][$x];
        $substrate_base = $_POST['substrate_base'][$x];
        $substrate_tax  = $_POST['substrate_tax'][$x];
        $substrate_id   = $x;
        $update -> bind_param('sssss', $substrate_name, $substrate_desc, $substrate_base, $substrate_tax, $substrate_id);
        if ($update -> execute() == true) {
            // Success stuff...
        } 
        else {
            // Error stuff...
        }
        $update -> close();
    }
}

【讨论】:

  • 这不起作用,但它确实帮助我找到了答案。谢谢!
【解决方案2】:

我更改了表单中的“名称”字段以包含基材的 ID:

&lt;input name="substrate_name_'.$substrate_id.'" /&gt;

然后对更新查询执行相同的操作(其中 id 由循环 $x 定义):

$substrate_name = $_POST['substrate_name_'.$x];
$substrate_desc = $_POST['substrate_desc_'.$x];
$substrate_base = $_POST['substrate_base_'.$x];
$substrate_tax  = $_POST['substrate_tax_'.$x];
$substrate_id   = $x;
$update -> bind_param('sssss', $substrate_name, $substrate_desc, $substrate_base, $substrate_tax, $substrate_id);

这给了我想要的结果。感谢 Rimon Khan 的想法和所有评论的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 2022-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多