Hola a todos, no se si el titulo va a corde con lo que necesito pero espero explicarme bien, estoy ingresando a dos tablas relacionadas ciertos registros, pero en la segunda tabla se pueden ingresar 1, 2, 3 o mas registros a la ves, aca un ejemplo de lo que tengo me funciona pero en dos funciones diferentes sin ningun problema:
en mi controlador tengo esto
Código PHP:
Ver originalpublic funcion nuevo()
{
//codigo ...
$this->_encuestas->registrarEncuesta(
$this->getPostParam('titulo'),
$this->getPostParam('cargo'),
$this->getPostParam('departamento'),
$this->getPostParam('provincia'),
$this->getPostParam('distrito'),
$fecha_enc);
$num = count($this->_encuestas
->getCandidatosCount()); // var_dump($num);
for ($i=0; $i<$num; $i++) {
$this->_encuestas->insertOpcionesEncuesta(
$_POST['candidato'][$i]
);
}
}
y en el modelo:
Código PHP:
Ver originalpublic function registrarEncuesta($titulo, $cargo, $departamento, $provincia, $distrito, $fecha_enc)
{
$this->_db->prepare("INSERT INTO encuestas (id, titulo, id_cargo, id_pais, id_departamento, id_provincia, id_distrito, fecha_encuesta, fecha_registro, usuario_registrador) VALUES (null, :titulo, :cargo, 1, :departamento, :provincia, :distrito, :fecha_enc, now(), '" . Session::get('id_usuario') . "')"
':titulo' => $titulo,
':cargo' => $cargo,
':departamento' => $departamento,
':provincia' => $provincia,
':distrito' => $distrito,
':fecha_enc' => $fecha_enc)
);
public function insertOpcionesEncuesta($id_candidato){
$sql = "SELECT MAX(id) AS id FROM encuestas LIMIT 1";
$query = $this->_db->prepare($sql);
$query->execute();
$row = $query->fetch();
$sql = "INSERT INTO opciones (id, id_encuesta, id_candidato) VALUES (null, :id_encuesta, :id_candidato)";
$statement = $this->_db->prepare($sql);
$statement->execute(array( ':id_encuesta' => $row['id'],
':id_candidato' => $id_candidato
));
}
con esto me funciona perfecto pero que pasa si no registra la primera funcion la segfunda me ingresaria con el id del ultimo registro de la primera tabla ya registrada antes, por lo que necesito saber como ejecutar la segunda consulta si y solo si la primera se ejecuto correctamente, esto meterlo talvez en una TRANSACCION, espero alguien me peuda dar una ayuda al respecto.