вставить массив из ввода в MySQL PDO - PullRequest
0 голосов
/ 25 ноября 2018

Я пытался вставить несколько строк в 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 голосов
/ 25 ноября 2018

$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();
}
0 голосов
/ 25 ноября 2018

Вы связываетесь с индексом массива в качестве ключа (который является числовым в используемой версии), но вы используете имена для параметров.

Нет необходимости использовать массив в любом случае, так каккороче привязывать каждый параметр за раз ...

$stmt = $conn->prepare("INSERT INTO memo(ID, firstname, lastname) 
            VALUES (NULL, :firstname, :lastname)");
$stmt->bindParam(":firstname", $firstname);
$stmt->bindParam(":lastname", $lastname);
$stmt -> execute();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...