вставка нескольких строк в базу данных mysql с помощью pdo

#php #mysql #arrays #pdo

#php #mysql #массивы #pdo

Вопрос:

У меня есть массив в следующем формате

 Array
(
[0] => Array
    (
        [name] => Product 1
        [weight] => 0.3000
        [Price] => 31.4400
    )

[1] => Array
    (
        [name] => Product 2
        [weight] => 0.2000
        [Price] => 32.4400
    )

)
  

Мой запрос pdo sql выглядит следующим образом:

 $sql = "INSERT INTO products(name,weight,price) VALUES (?,?,?)"; 
$stmt = $conn->prepare($sql); 
foreach ($new_items as $v) {    
    $stmt->execute(array_values($v)); 
}
  

Получение ошибки:

PHP Уведомление: преобразование массива в строку в $stmt-> выполнить(array_values($ v));

Обновить:

Попробовал этот код, предоставленный @user1978142

 // insert to database
foreach($new_items as $key => $value) {
    $stmt = $conn->prepare("INSERT INTO products (name, weight, price) VALUES (:name, :weight, :price)");
    $stmt->bindParam(':name', $value['name']);
    $stmt->bindParam(':weight', $value['weight']);
    $stmt->bindParam(':price', $value['Price']);
    $stmt->execute();
}
  

Ошибка: неверный номер параметра: количество связанных переменных не соответствует количеству токенов.

Что не так с обоими приведенными выше кодами?? Я новичок.

Комментарии:

1. @ kevinabelita Это не работает

2. Мне действительно не нравится, когда компьютер явно лжет. Ваш код выглядит нормально. Очевидно, что запрос подготовлен нормально. Он пытается связать, что, очевидно, разумно, и запутывается. Что нужно проверить: во-первых, существуют подразумеваемые типы параметров: pdo.constants.php . Убедитесь, что в определении вашей таблицы есть простые определения столбцов данных в виде целого числа или строки. Далее, var_dump($key, $value) и убедитесь, что имена и значения массива соответствуют вашим ожиданиям. Обновите свой ответ любой полезной информацией.

3. @RyanVincent компьютер никогда не лжет.

4. @Yourcommon Sense, я полностью согласен! Я должен был прояснить, что он запутывается, а не лжет. Я рассматриваю это как точку для начала процесса проверки всех моих предположений о ситуации, поскольку я, очевидно, тот, кто не понимает ситуацию. Предполагалось, что это будет «шутка в щеку», а не серьезный момент.

Ответ №1:

после $stmt = $conn->prepare($sql); добавления этого кода:

  $stmt -> bind_param("ssd", $name, $weight,$price);
  

Ответ №2:

Для текущей структуры данных ваш код в порядке.

Ошибка указывает на то, что ваш массив имеет другую структуру, по крайней мере, этот массив имеет еще один вложенный уровень

проверьте входные данные.

Ответ №3:

после подготовки stament сначала используйте bind_param , затем продолжайте.

Комментарии:

1. foreach($new_items как $key => $value) { $stmt = $dbh->подготовить(«ВСТАВИТЬ В продукты (название, вес, цена) ЗНАЧЕНИЯ (:name, :weight, :price)»); $stmt-> bindParam(‘:name’, $value[‘name’]); $stmt->bindParam(‘:weight’, $value[‘weight’]); $stmt->bindParam(‘:price’, $value[‘Price’]); $stmt-> выполнить(); } …..Не работает???