вставка mysql с несколькими строками с использованием pdo

#mysql #pdo

#mysql #pdo

Вопрос:

У меня есть ассоциативный массив, содержащий несколько строк, например, следующим образом:

 Array
(
    [0] => Array
        (
            [ID] => 37
            [category name] => Cell Phone
        )

    [1] => Array
        (
            [ID] => 38
            [category name] => LED Light
        )
  

и так далее…

У меня есть следующая функция для вставки данных в мою базу данных с использованием PDO.

  function PDOBindArray($poStatement, $paArray){
    foreach ($paArray as $k=>$v){
    $poStatement->bindValue(':'.$k,$v);
} 
  } 
  

и вот мой оператор insert:

 $stmt = $conn->prepare("INSERT INTO subcategory (cb_category_id,subcategory_name) VALUES (:ID,:category name)");
PDOBindArray($stmt,$data);
$stmt->execute();
  

Я получаю следующую ошибку во время вставки:

Недопустимый номер параметра: количество связанных переменных не соответствует количеству токенов

Я знаю, что это что-то глупое. Но я не могу его найти…

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

1. :category name должно быть :category_name и то же самое в массиве.

2. можем ли мы использовать кавычки?? я попробовал, но это не увенчалось успехом. Я получаю этот массив из внешнего источника, преобразованный из файла csv.. Есть ли другой способ

3. str_replace(' ', '_', $k) ?

4. str_replace(‘ ‘, ‘_’, $ v) Недопустимый номер параметра: количество связанных переменных не соответствует количеству токенов

5. У вас также есть несколько других проблем

Ответ №1:

 $sql = "INSERT INTO subcategory (cb_category_id,subcategory_name) VALUES (?,?)";
$stmt = $conn->prepare($sql);
foreach ($paArray as $v){
    $stmt->execute(array_values($v));
}