#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-> выполнить(); } …..Не работает???