我试图在PDO MySQL中插入多行,但没有成功我的代码低于
<input type="text" name="firstname[]"> <input type="text" name="lastname[]">
function input_checker($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
$firstname = input_checker($_POST["firstname"]);
$lastname = input_checker($_POST["lastname"]);
$rows = array($firstname, $lastname);
$stmt = $conn->prepare("INSERT INTO memo(ID, firstname, lastname)
VALUES (NULL, :firstname, :lastname)");
foreach($rows as $key => $value){
$stmt->bindParam($key, $value);
}
$stmt -> execute();
$rows
不是关联数组,因此其中没有:firstname
和:lastname
键。此外,bindParam()
绑定到引用,因此每次在循环中使用相同的$value
变量将两个参数绑定到循环中的最后一个值。
首先您不需要数组。只需单独绑定每个参数。
但是$_POST['firstname']
和$_POST['lastname']
是数组,所以需要循环遍历它们。
$firstname = $lastname = null;
$stmt = $conn->prepare("INSERT INTO memo(ID, firstname, lastname)
VALUES (NULL, :firstname, :lastname)");
$stmt->bindParam(":firstname", $firstname);
$stmt->bindParam(":lastname", $lastname);
foreach ($_POST['firstname'] as $i => $firstname) {
$lastname = $_POST['lastname'][$i];
$stmt->execute();
}
您绑定的是数组索引作为键(在您使用的版本中是数字(,但您使用的是参数的名称。
无论如何都不需要使用数组,因为一次绑定每个参数会更短。。。
$stmt = $conn->prepare("INSERT INTO memo(ID, firstname, lastname)
VALUES (NULL, :firstname, :lastname)");
$stmt->bindParam(":firstname", $firstname);
$stmt->bindParam(":lastname", $lastname);
$stmt -> execute();