使用数组的 PDO 更新表

Posted

技术标签:

【中文标题】使用数组的 PDO 更新表【英文标题】:PDO update table using array 【发布时间】:2020-07-12 11:25:20 【问题描述】:

我正在学习 PDO。 PDO 中数组的使用给我带来了困难。我正在使用 PDO 语法开发简单的 Web 应用程序。一切进展顺利,但我无法从单个提交按钮更新多个值。

html 表单

    <td>
        <input type="number" name="roll[]" value="<?php echo $roll?>">
    </td>
    <td>
        <input type="text" name="name[]" value="<?php echo $name?>">
    <td>

我可以打印数据。

if(isset($_POST['submit']))
        $name = $_POST['name'];
        $roll = $_POST['roll'];
        foreach( $roll as $key => $n )
            print "The name is ".$name[$key]." and email is ".$roll[$key].", thank you\n";
        
    

但我不能一次更新多个值。可能是因为对PDO中的数组组合缺乏了解。我在互联网上搜索过。但我发现只有提前的问题和答案。我在这件事上找不到任何示例或讨论主题。 我确定我 100% 错了,所以下面的代码不起作用。请帮助如何使用数组进行更新

PHP 代码

if(isset($_POST['submit']))
    $name = $_POST['name'];
    $roll = $_POST['roll'];

    foreach( $roll as $key => $n )
        $sql = "UPDATE student SET name=:name WHERE roll=:roll";
        $query = $con->prepare($sql);
        $query->bindparam(':roll', $roll[$key]);
        $query->bindparam(':name', $name[$key]);
        $query->execute();
    

【问题讨论】:

运行这个循环时到底发生了什么?而且您只需准备和绑定一次参数。我不知道它是否会有所作为,但是您是否尝试过使用 bindValues() 的相同循环?更重要的是,你有任何错误处理吗,PDO 是否设置为抛出异常? 【参考方案1】:

如何在循环外准备语句,然后在循环内绑定值并执行。

<?php


if(isset($_POST['submit']))
    $name = $_POST['name'];
    $roll = $_POST['roll'];


     $sql = "UPDATE student SET name=:name WHERE roll=:roll";
     $query = $con->prepare($sql);

    foreach($roll as $key => $n)
        $query->bindParam(':roll', $n[$key]);
        $query->bindParam(':name', $name[$key]);
        $query->execute();
    

【讨论】:

【参考方案2】:

此操作使用 for 循环,因为不涉及关联数组

if(isset($_POST['submit']))

$name = array();// initialize it first for a good coding standard
$roll = array();// initialize it first for a good coding standard
$name = $_POST['name'];
$roll = $_POST['roll'];

for($i=0;$i<count($name);$i++) // considering the array elements of roll are equal to name elements 
    $sql = "UPDATE student SET name=:name WHERE roll=:roll";
    $query = $con->prepare($sql);
    $query->bindparam(':roll', $name[$i]);
    $query->bindparam(':name', $roll[$i]);
    $query->execute();


【讨论】:

由于打印工作正常,循环似乎不是问题。为什么会这样呢? 为什么我们要使用 foreach 循环,因为没有关联数组? 问题是为什么结果会有所不同;它将如何解决问题?

以上是关于使用数组的 PDO 更新表的主要内容,如果未能解决你的问题,请参考以下文章

使用带有 PDO 的数组更新多个 MySQL 表列

无法使用 PHP 和 PDO 更新表

JS数组到PHP并使用PDO更新MYSQL中的表

循环更新查询 pdo where id

PDO - foreach 只更新最后一个

如何从另一个表更新mysql pdo中的字段[重复]