从输入插入数组到MySQL PDO

时间:2018-11-25 17:41:53

标签: php 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();

2 个答案:

答案 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();