将数组从输入插入MySQL PDO



我试图在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();

最新更新