【问题标题】:PDO update table using array使用数组的 PDO 更新表
【发布时间】: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 是否设置为抛出异常?

标签: php mysql arrays 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 循环,因为没有关联数组?
    • 问题是为什么结果会有所不同;它将如何解决问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 2021-10-30
    • 2012-08-16
    • 2016-09-21
    • 1970-01-01
    • 2014-10-24
    相关资源
    最近更新 更多