Inserciones múltiples con PDO

Tengo las tablas de DB: images y category

Actualmente, la única función para insertar en la tabla de categorías es similar a esto:

 public function add($ttitle) { try { $stmt = $this->db->prepare("INSERT INTO category (title) VALUES(:title)"); $stmt->bindparam(":title",$ttitle); $stmt->execute(); return true; } catch(PDOException $e) { echo $e->getMessage(); return false; } } 

Tengo un formulario para ingresar el título y la posibilidad de insertar imágenes de urls.

Al hacer clic en Enviar el título, quiero ir a la tabla de categorías, hasta ahora bien, las imágenes deben ir a las imágenes de la tabla, una identificación para cada imagen pero con una combinación interna a la identificación de la categoría.

Las images mesa:

 id_image | category_id | dir_image 

No puedo hacer esto correctamente

 $stmt = $this->db->prepare("INSERT INTO category (title) VALUES(:ttitle)"); $stmt = $this->db->prepare("SELECT id_image FROM images WHERE id_category = category_id "); 

Ejemplo del resultado que quiero:

forma html

 Category title: Test Image1: image1.png Image2: image2.png Image3: image3.png Image4: image4.png Submit 

después de enviar

Categoría de la tabla:

  id_category | title 1 Test 

Imágenes de tabla:

  id_image | category_id | dir_image 1 1 image1.png 2 1 image2.png 3 1 image3.png 4 1 image4.png 

Actualizar:

 public function add($ttitle,$images) { try { $stmt = $this->db->prepare("INSERT INTO category (title) VALUES(:title)"); $stmt->bindparam(":title",$ttitle); $stmt->execute(); $lastId = $db->lastInsertId(); $imgs = count($images); for ($i = 0; $i db->prepare("INSERT INTO images (category_id, dir_image) VALUES (:title)"); $stmt->bindparam(":category_id",$lastId); $stmt->bindparam(":dir_image",$images); $stmt = $this->db->prepare($sql); $stmt->execute() } return true; } catch(PDOException $e) { echo $e->getMessage(); return false; } } 

Varias cosas:

  1. Elimine la segunda instrucción de preparación dentro for ciclo
  2. Agregue parámetros enlazados en VALUES() de instrucción sql
  3. Indexe la matriz $images con iterador de bucle o use foreach

Ver ajustado for ciclo:

 $stmt = $this->db->prepare("INSERT INTO images (category_id, dir_image) VALUES (:category_id, :dir_image)"); $stmt->bindParam(":category_id" ,$lastId); $stmt->bindParam(":dir_image", $image); for ($i = 0; $i < count($images); $i++){ $image = $images[$i]; $stmt->execute(); } 

Alternativamente con el bucle foreach (suponiendo una matriz de una dimensión) :

 $stmt = $this->db->prepare("INSERT INTO images (category_id, dir_image) VALUES (:category_id, :dir_image)"); $stmt->bindParam(":category_id", $lastId); $stmt->bindParam(":dir_image", $item); foreach ($images as $item){ $stmt->execute(); }