PDO PHP

Insertar datos MySQL usando PDO PHP

Insertar datos MySQL usando PDO PHP. En este artículo veremos la inserción a la base de datos usando PDO PHP. Primeramente tenemos que asegurarnos de que tenemos una variable de conexión PDO configurada correctamente que necesita para ejecutar consultas SQL con PDO y para informarle de los posibles errores.

Además, usaremos librerías externas como BootStrap para darle una estética profesional a nuestro sistema

Para ejecutar una consulta INSERT INTO con PDO, tenemos que seguir los siguientes pasos que detallamos a continuación:

  • Crear una instrucción SQL INSERT INTO correcta
  • Reemplazar todos los valores reales con marcadores de posición en la consulta
  • Preparar la consulta resultante para su ejecución
  • Ejecutar la instrucción, enviando todos los valores reales en forma de matriz a la base de datos.

¿Cómo funcionan las declaraciones preparadas de PDO?

Las declaraciones preparadas de PDO PHP poseen lo siguiente:

  1. Primero prepara una consulta SQL con valores vacíos como marcadores de posición con un signo de interrogación o un nombre de variable con dos puntos antes de cada valor
  2. Vincula valores o variables a los marcadores de posición
  3. Ejecutar consulta simultáneamente

Insertar datos MySQL usando PDO PHP

A continuacion, veremos una serie de procesos acerca de la inserción de datos mediante PDO.

1) La base de datos y tabla

Nuestra base de datos tendrá como nombre “php_insertarpdo” El y la tabla tendrá como nombre “tbl_personal“, pero ustedes puedes personalizar esos nombres en cualquier momento.

Código SQL para la tabla personal:

Esta consulta SQL pueden ejecutarlo en el phpMyAdmin y/o otro gestor de base de datos MySQL.

CREATE TABLE `tbl_personal` (
  `id` int(11) NOT NULL,
  `nombres` varchar(50) NOT NULL,
  `apellidos` varchar(200) DEFAULT NULL,
  `profesion` varchar(150) DEFAULT NULL,
  `estado` varchar(100) DEFAULT NULL,
  `fregis` date DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


INSERT INTO `tbl_personal` (`id`, `nombres`, `apellidos`, `profesion`, `estado`, `fregis`) VALUES
(1, 'Zoila', 'Nina', 'Sistemas', 'Perú', '2019-08-20'),
(2, 'Luis ', 'Fontis', 'Administrador', 'Argentina', '2019-08-19'),
(3, 'Maria ', 'Cotrina', 'Sistemas', 'Ecuador', '2019-08-21'),
(4, 'Jenifer ', 'Carrillo', 'Analista', 'Chile', '2019-08-21'),
(5, 'Milagros ', 'Ferrer', 'Economista', 'Colombia', '2019-08-16');

ALTER TABLE `tbl_personal`
  ADD PRIMARY KEY (`id`);


ALTER TABLE `tbl_personal`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=13;COMMIT;

2) Declaración del fichero de conexión

El script de conexión puede estar dentro de nuestro archivo pero es recomendable realizar una declaración externa para dinamizar los procesos.

<?php 
include('BDconect.php');
?>

3) Creación de un formulario HTML5

Para este ejemplo hemos utilizado un formulario usando HTML5 y el método POST para enviar la información. Sin embargo, para darle estética al ejemplo hemos agregado la librería BootStrap.

<form action="" method="POST">
  <div class="form-row">
    <div class="form-group col-md-6">
      <label for="nombres">Nombres</label>
      <input name="nombres" type="text" class="form-control" placeholder="Nombres">
    </div>
    <div class="form-group col-md-6">
      <label for="edad">Apellidos</label>
      <input name="apellidos" type="text" class="form-control" id="edad" placeholder="Apellidos">
    </div>
  </div>
<div class="form-row">  
    <div class="form-group col-md-6">
      <label for="profesion">Profesión</label>
      <input name="profesion" type="text" class="form-control" id="profesion" placeholder="Profesion">
    </div>

  <div class="form-group col-md-6">
    <label for="Estado">Estado</label>
    <select required name="estado" class="form-control" id="Estado">
    <option value=""><< >></option>
    <option value="Colombia">Colombia</option>
    <option value="Argentina">Argentina</option>
    <option value="Ecuador">Ecuador</option>
    <option value="Peru">Peru</option>
    <option value="Brasil">Brasil</option>
    <option value="Bolivia">Bolivia</option>
    <option value="Chile">Chile</option>
    </select>
  </div>

</div>
<div class="form-group">
  <button name="insertar" type="submit" class="btn btn-primary  btn-block">Guardar</button>
</div>
</form>

4) Resultados de la consulta

Aquí, mostramos la consulta SQL para mostrar los resultados en una tabla. Por lo tanto, para devolver los resultados de la base de datos hemos usado el ciclo FOREACH

<?php
$sql = "SELECT * FROM tbl_personal"; 
$query = $connect -> prepare($sql); 
$query -> execute(); 
$results = $query -> fetchAll(PDO::FETCH_OBJ); 

if($query -> rowCount() > 0)   { 
foreach($results as $result) { 
echo "<tr>
<td>".$result -> nombres."</td>
<td>".$result -> apellidos."</td>
<td>".$result -> profesion."</td>
<td>".$result -> estado."</td>
<td>".$result -> fregis."</td>
</tr>";

   }
 }
?>

5) Declaramos la condicional de envío

Esta condicional se ejecutara siempre y cuando se procese el formulario. Además, esta condicional ejecutara la inserción de la información a la base de datos.

if(isset($_POST['insertar'])){
....
}

6) Las variables enviadas

Recogemos la información enviada por el formulario y lo procesamos en variables

///////////// Informacion enviada por el formulario /////////////
$nombres=$_POST['nombres'];
$apellidos=$_POST['apellidos'];
$profesion=$_POST['profesion'];
$estado=$_POST['estado'];
$fregis = date('Y-m-d');
///////// Fin informacion enviada por el formulario /// 

7) Crear una consulta INSERT con marcadores de posición

La consulta SQL es normal, la variación del PDO radica que en lugar de valores, colocamos marcadores de posición con nombre. Veamos un ejemplo:

////////////// Insertar a la tabla la informacion generada /////////
$sql="insert into tbl_personal(nombres,apellidos,profesion,estado,fregis) 
values(:nombres,:apellidos,:profesion,:estado,:fregis)";

El uso de marcadores de posición se conoce como instrucciones preparadas. Usamos instrucciones preparadas como plantillas que podemos rellenar más adelante con valores reales que previamente obtenidos desde formularios, esta información está en el punto 6.

8) Preparar la consulta

En este paso la siguiente instrucción prepara una sentencia para su ejecución y devuelve un objeto sentencia. Si observamos toma la variable $sql

$sql = $connect->prepare($sql);

9) Enlazar los marcadores de posición a las variables:

Como podemos apreciar en este script, estamos vinculando un parámetro al nombre de variable especificado.

$sql->bindParam(':nombres',$nombres,PDO::PARAM_STR, 25);
$sql->bindParam(':apellidos',$apellidos,PDO::PARAM_STR, 25);
$sql->bindParam(':profesion',$profesion,PDO::PARAM_STR,25);
$sql->bindParam(':estado',$estado,PDO::PARAM_STR,25);
$sql->bindParam(':fregis',$fregis,PDO::PARAM_STR);

Puede agregar un tercer parámetro que filtre los datos antes de que lleguen a la base de datos:

PDO::PARAM_STR se utiliza para cadenas.
PDO::PARAM_INT se utiliza para enteros.
PDO::PARAM_BOOL solo permite valores booleanos (true/false).
PDO::PARAM_NULL solo permite el tipo de datos NULL.

10) Ejecutamos la consulta:

Usando la instrucción “execute” podemos ejecutar la consulta preparada previamente

$sql->execute()

11) Compruebe que la inserción realmente funcionó:

También podemos apoyarnos en una condicional para lograr la ejecución de la consulta SQL. Sin embargo, en este ejemplo comprobaremos si se realizó la inserción a la base de datos usando la instrucción “lastInsertId”.

$lastInsertId = $connect->lastInsertId();
if($lastInsertId>0){

echo "<div class='content alert alert-primary' > Gracias .. Tu Nombre es : $nombres  </div>";
}
else{
    echo "<div class='content alert alert-danger'> No se pueden agregar datos, comuníquese con el administrador  </div>";

print_r($sql->errorInfo()); 
}

Si el último identificador insertado es mayor que cero, la inserción funcionó.

12) Mostrando todo el código junto:

Aquí, mostramos el ejemplo completo de la inserción a la base de datos.

<?php
    
if(isset($_POST['insertar'])){
///////////// Informacion enviada por el formulario /////////////
$nombres=$_POST['nombres'];
$apellidos=$_POST['apellidos'];
$profesion=$_POST['profesion'];
$estado=$_POST['estado'];
$fregis = date('Y-m-d');
///////// Fin informacion enviada por el formulario /// 

////////////// Insertar a la tabla la informacion generada /////////
$sql="insert into tbl_personal(nombres,apellidos,profesion,estado,fregis) 
values(:nombres,:apellidos,:profesion,:estado,:fregis)";
    
$sql = $connect->prepare($sql);
    
$sql->bindParam(':nombres',$nombres,PDO::PARAM_STR, 25);
$sql->bindParam(':apellidos',$apellidos,PDO::PARAM_STR, 25);
$sql->bindParam(':profesion',$profesion,PDO::PARAM_STR,25);
$sql->bindParam(':estado',$estado,PDO::PARAM_STR,25);
$sql->bindParam(':fregis',$fregis,PDO::PARAM_STR);
    
$sql->execute();

$lastInsertId = $connect->lastInsertId();
if($lastInsertId>0){

echo "<div class='content alert alert-primary' > Gracias .. Tu Nombre es : $nombres  </div>";
}
else{
    echo "<div class='content alert alert-danger'> No se pueden agregar datos, comuníquese con el administrador  </div>";

print_r($sql->errorInfo()); 
}
}// Cierra envio de guardado
?>

CONCLUSIÓN: Insertar datos MySQL

El uso de la sentencia “prepare” del PDO además de escapar valores aporta otros mecanismos de seguridad que hacen de su uso un funcionamiento más seguro y eficiente.

Sin embargo, en MySQLi podríamos utilizar la función “mysqli_real_scape_string” para escapar valores, pero se requiere otros recursos para conseguir una implementación más robusta como la ofrecida por el método prepare de la clase PDO PHP.

Si observamos, a detalle la implementación no es tan complicada y su curva de aprendizaje es muy baja, recordemos que su implementación es muy recomendada si nuestro sistema posee una conexión a la base de datos.

DESCARGAR EL EJEMPLO

A continuación, les dejare un paquete ZIP completo donde contendrá la librería BootStrap, las consultas SQL, La base de datos para que puedan visualizar el ejemplo completo. Un saludo a la distancia.

Descarga 156 Sistemas PHP & MySQL

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba