因此,我正在学习如何使用循环更新数据库。 我有一个表,其字段名称如“ id”,“ nh1”,“ nh2”,“ nh3”。
这是输入框的示例:
<?php
echo "<form action='' method='post'>";
for ($i = 1; $i <= 3; $i++) {
echo "<input type='text' name='input$i'>";
}
echo "<input type='submit' value='Submit'>";
echo "</form>";
我想做的是要使用循环更新数据库,例如:
<?php
for ($i = 1; $i <= 3; $i++) {
${'NH'.$i} = $_POST['input'.$i];
}
for ($i = 1; $i <= 3; $i++) {
$q = mysqli_query("update myTable set nh$i=${'NH'.$i} where id=1");
}
有可能吗?还是有其他方法可以正确使用它?
希望我的问题很清楚。
答案 0 :(得分:1)
此版本同时使用预准备语句和构建单个SQL语句。我在注释中添加了代码以帮助...
// Values used to bind to prepare
$binds = [];
// The types of the binds
$types = "";
// The SQL statement
$update = "update myTable set ";
for($i=1; $i<=3; $i++){
// If this input is set
if ( isset($_POST['input'.$i])) {
// Store it in the array
$binds[] = $_POST['input'.$i];
// Add in part of SQL - e.g. nh1 = ?,
$update .= "nh$i = ?,";
// Add type of parameter (string)
$types .= "s";
}
}
// Add where clause (remove trialing comma from list of fields to update
$update = substr ($update, 0, -1)." where id=1";
$stmt = $mysqli->prepare($update);
// Bind the variables
$stmt->bind_param($types, ...$binds );
$stmt->execute();
它构建的语句类似于...
update myTable set nh1 = ?,nh3 = ? where id=1
具有要绑定的数据,如下所示,因此这些元素中的每一个都将替换为SQL中相应的占位符(?
)。
Array
(
[0] => value for input 1
[1] => value for input 3
)