我试图向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();
答案 0 :(得分:3)
$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();
}
答案 1 :(得分:1)
您正在使用数组索引作为键进行绑定(在所使用的版本中为数字),但是您正在使用参数名称。
无论如何都不需要使用数组,因为一次绑定每个参数会更短...
$stmt = $conn->prepare("INSERT INTO memo(ID, firstname, lastname)
VALUES (NULL, :firstname, :lastname)");
$stmt->bindParam(":firstname", $firstname);
$stmt->bindParam(":lastname", $lastname);
$stmt -> execute();