使用数组的 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 更新表的主要内容,如果未能解决你的问题,请参考以下文章