php - 从 PDO 获取查询更新多行

标签 php mysql pdo

我了解使用准备好的语句调用和更新自行,但我无法理解如何更新多个记录。

我有一个简单的出勤登记册,其中有一个选择框来定义他们是否出席。我将这些行称为表格格式:

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<table>
    <tbody>
        <tr>
            <th scope="col">Name</th>
            <th scope="col">Attendance</th>
        </tr>
    <?php if($Event_list->rowCount() > 0) {
    foreach ($Event_list->fetchAll() as $Event_list_row) { ?>
        <tr>
            <td>
                <?php echo ucwords($Event_list_row['firstname'])." ".ucwords($Event_list_row['surname']); ?>
            </td>
            <td>
                <input type="hidden" name="id" value="<?php echo $Event_list_row['booking_id']; ?>">
                <select name="outcome">
                    <option value="0">Choose</option>
                    <option value="1">Yes</option>
                    <option value="2">No</option>
                </select>
            </td>
        </tr>
    <?php } } ?>
    </tbody>
</table>
<input type="submit" value="Update" name="update">
</form>

我以为我可以再次使用 foreach 来更新每条记录,但显然我做错了什么:

if(isset($_POST["update"])) {

    $Update_ID = $_POST["id"];
    $Update_Outcome = $_POST["outcome"];

    foreach($_POST['id'] as $count => $id) {
        $Attendance_Update_SQL = "
        UPDATE event_booking SET
        `confirmed`= :outcome
        WHERE `id`= :id";
        $Attendance_Update = $dbconn->prepare($Attendance_Update_SQL);    
        $Attendance_Update->bindParam(':id', $Update_ID[$count], PDO::PARAM_STR);
        $Attendance_Update->bindParam(':outcome', $Update_Outcome[$count], PDO::PARAM_STR);
        if($Attendance_Update->execute()) { 
        // Add in success message?
        }
    }
}

我收到以下错误: 警告:为 foreach() 提供的参数无效 与 foreach 行相关

最佳答案

快速修复:

重命名name="id"name="id[]"

重命名name="outcome"name="outcome[]"

注意:当您向表单添加复选框类型时,这种语法和对索引的依赖是有问题的。

<小时/>

好吧,最大的问题是你输入的名称会发生​​冲突

例如<select name="outcome">只会设置表单中的最后记录结果。

我会使用var_dump($_POST)了解您的帖子数据

建议,将您的“名称”属性重命名为name="record[id][property]" ...

<select name="record[<?php echo $Event_list_row['booking_id']; ?>][outcome]">
  <option value="0">Choose</option>
  <option value="1">Yes</option>
  <option value="2">No</option>
</select>

然后您将使用

foreach( $_POST['record'] as $id => $data )

哪里$id$data['outcome']现在更容易理解和使用。

关于php - 从 PDO 获取查询更新多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47045211/

相关文章:

php - GAE gcloud dev_appserver.py PHP : Failed to read session data: user (path: Memcache)

PHP进程加载并卡住所有CPU

php - 如何在 PHP 中仅使用 REMOTE_ADDR 显示 IPv4?

php - 如何在 PHP 中按值对数组进行排序并保留键?

php - 模块 'PDO' 已经加载到 Unknown on line 0 in laravel installation on ubuntu

mysql - 如何从Mysql中读取单独的日期、单独的月份和单独的年份,其格式为10/12/2004

php - 使用 MSSQL 的 PDO 返回无效游标

php - 找不到 Laravel Illuminate\Validation\Rule

php - UPDATE DATA WHERE 带引号的数据

php - Laravel Eloquent 错误地更新每一行值