56. Insertar registros en una BBDD MySQL con PHP

En este capítulo crearemos un método que nos permita poder agregar nuevos registros a nuestra base de datos, para ello nos dirigimos al modelo base y vamos a crear un nuevo método que nos permita insertar registros. Para ello nos dirigimos al archivo Models/Model.php como hemos ido haciendo hasta ahora.

Models/Model.php

<?php

namespace App\Models;

use mysqli;

class Model
{
  // Propiedades que recogen los datos de acceso a la BBDD
  protected $db_host = DB_HOST;
  protected $db_user = DB_USER;
  protected $db_pass = DB_PASS;
  protected $db_name = DB_NAME;

  // Propiedad que recoge la conexión a la base de datos
  protected $connection;

  // Propiedad que recoge la consulta a la BBDD
  protected $query;

  public function __construct(){
    $this->connection();
  }

  // Método encargado de realizar la conexión
  public function connection(){
    // Conexión con mysqli
    $this->connection =  new mysqli($this->db_host, $this->db_user, $this->db_pass, $this->db_name);

    if($this->connection->connect_error)
    {
      die('Error de conexión: ' . $this->connection->connect_error);
    }
  }

  // Método que hace la consulta a la base de datos
  public function query($sql){
    $this->query = $this->connection->query($sql);

    return $this;
  }

  // Método que recupera el primer registro de la consulta a la base de datos
  public function first(){
    return $this->query->fetch_assoc();
  }

  // Método que recupera todos los registros de la consulta a la base de datos
  public function get(){
    return $this->query->fetch_all(MYSQLI_ASSOC);
  }

  // Consultas
  // Método que nos devolverá todos los registros de una determinada tabla
  public function all(){
    $sql = "SELECT * FROM {$this->table}";
    return $this->query($sql)->get();
  }
 
  // Recuperar determinado registro por su id
  public function find($id){
    // SELECT * FROM contacts WHERE id = 1
    $sql = "SELECT * FROM {$this->table} WHERE id = {$id}";
    return $this->query($sql)->first();
  }
 
  // Método para filtrar registros
  public function where($column, $operator, $value = null){
    if($value == null){
      $value = $operator;
      $operator = '=';
    }

    // SELECT * FROM contacts WHERE name = 'Francisco'
    $sql = "SELECT * FROM {$this->table} WHERE {$column} {$operator} '{$value}'";
    $this->query($sql);

    return $this;
  }

  // Método para agregar registros
  public function create($data){
    // INSERT INTO contacts (name, email, phone) VALUES ('Francisco', This email address is being protected from spambots. You need JavaScript enabled to view it.', '987654321')
    $columns = array_keys($data);
    $columns = implode(', ', $columns);
   
    $values = array_values($data);
    $values = "'" . implode("', '", $values) . "'";

    $sql = "INSERT INTO {$this->table} ({$columns}) VALUES ({$values})";
    $this->query($sql);

    $insert_id = $this->connection->insert_id;

    return $this->find($insert_id);
  }
}

 

Y también hemos modificado el archivo Controllers/HomeController.php

Controllers/HomeController.php

<?php

namespace App\Controllers;

use App\Models\Contact;

class HomeController extends Controller
{
  public function index()
  {
    $contactModel = new Contact();

    // Le decimos al modelo que haga la siguiente consulta
    return $contactModel->create([
      'name' => 'Eva Paredes',
      'email' => This email address is being protected from spambots. You need JavaScript enabled to view it.',
      'phone' => '123456789'
    ]);

    // Método que se encarga de incluir toda la lógica necesaria para mostrar contenido
    return $this->view('home', [
      'title' => 'Home',
      'description' => 'Esta es la página Home'
    ]);
  }
}