Manipulación de base de datos#

Logo PHP

Manipulación de base de datos con PDO en PHP 7.4

Conexión SQLITE 3#

Pasos iniciales:

  • Primero tenemos que instalar sqlite3 en nuestro sistema: sudo apt install php7.4-sqlite3

  • Luego localizamos el archivo php.ini que suele estar en /etc/php/7.4/ y dentro de las carpetas apache2 y cli encontraremos estos archivos.

  • Editamos y buscamos las líneas que ponen ;extension=pdo_sqlite y ;extension=sqlite si tienen un ; lo quitamos para habilitarlas.

  • Conectar a una base de datos SQLite 3:

 1<?php
 2    try{
 3        // realizamos la conexion con el motor sqlite y apuntamos directamente a la base de datos:
 4        $db = new PDO('sqlite:datos.sqlite');
 5        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 6        $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
 7
 8        echo "Conexión realizada con éxito";
 9    }catch(Exception $e){
10        echo "Error de conexión: " . $e->getMessage();
11    }
12    // para cerrar la conexión:
13    $con = null;
14?>

Conexión MySQL#

Pasos iniciales:

  • Primero tenemos que instalar sqlite3 en nuestro sistema: sudo apt install php7.4-mysql

  • Luego localizamos el archivo php.ini que suele estar en /etc/php/7.4/ y dentro de las carpetas apache2 y cli encontraremos estos archivos.

  • Editamos y buscamos las líneas que ponen ;extension=pdo_mysql si tienen un ; lo quitamos para habilitarlas.

 1<?php
 2    // preparamos los datos del servidor:
 3    $servidor = "localhost";
 4    $usuario = "guillermo";
 5    $clave = "guillermo";
 6    try{
 7        // preparamos la conexión eligiendo el motor mysql:
 8        $conn = new PDO("mysql:host=$servidor;dbname=prueba", $usuario, $clave);
 9        // realizamos la conexión:
10        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
11        echo "Conexión realizada con éxito";
12    }catch(Exception $e){
13        echo "Error de conexión: " . $e->getMessage();
14    }
15    // para cerrar la conexión:
16    $conn = null;
17?>

Conexión SQL SERVER#

Para realizar la conexión a SQL SERVER:

extension=php_sqlsrv_74_ts_x64.dll
extension=php_sqlsrv_74_nts_x64.dll
extension=php_pdo_sqlsrv_74_nts_x64.dll
extension=php_pdo_sqlsrv_74_ts_x64.dll
  • crear un usuario que pueda hacer login en el servidor DDBB y permitr el acceso desde SQL Server en lugar de Windows Authorization.

  • Luego podemos crear el conector:

 1<?php
 2    // preparamos los datos del servidor:
 3    $servidor = "NOMBREEQUIPO"; // no vale localhost.
 4    $usuario = "guillermo";
 5    $clave = "guillermo";
 6    try{
 7        // preparamos la conexión eligiendo el motor mysql:
 8        $conn = new PDO("sqlsrv:server=$servidor;database=prueba", $usuario, $clave);
 9        // realizamos la conexión:
10        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
11        echo "Conexión realizada con éxito";
12    }catch(Exception $e){
13        echo "Error de conexión: " . $e->getMessage();
14    }
15
16    // para cerrar la conexión:
17    $conn = null;
18?>

Operaciones CRUD#

Crear base de datos#

 1<?php
 2    $servidor = "localhost";
 3    $usuario = "guillermo";
 4    $clave = "guillermo";
 5    // ignoramos elegir la base de datos al preparar conexión::
 6    $conn = new PDO("mysql:host=$servidor", $usuario, $clave);
 7    // realizamos la conexión:
 8    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 9    // preparamos la consulta:
10    $sql = "CREATE DATABASE pruebaSQL";
11    // realizamos la consulta:
12    $conn->exec($sql);
13
14    echo "Base de datos creada con éxito";
15    $conn = null;
16?>

Crear una tabla#

 1<?php
 2    $servidor = "localhost";
 3    $usuario = "guillermo";
 4    $clave = "guillermo";
 5    $base = "prueba";
 6
 7    $conn = new PDO("mysql:host=$servidor;dbname=$base", $usuario, $clave);
 8
 9    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
10
11    $sql = "CREATE TABLE agenda(
12        id INT(10) AUTO_INCREMENT PRIMARY KEY,
13        nombre VARCHAR(30) NOT NULL,
14        edad INT(10) NOT NULL
15        )";
16
17    $conn->exec($sql);
18
19    echo "Tabla creada con éxito";
20    $conn = null;
21?>

Insertar registros#

 1<?php
 2    $servidor = "localhost";
 3    $usuario = "guillermo";
 4    $clave = "guillermo";
 5    $base = "prueba";
 6
 7    $conn = new PDO("mysql:host=$servidor;dbname=$base", $usuario, $clave);
 8
 9    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
10
11    $sql = "INSERT INTO agenda (nombre, edad) values ('Alfredo', 30)";
12
13    $conn->exec($sql);
14
15    echo "Inserción realizada con éxito";
16    $conn = null;
17?>

Inserciones y actualizaciones múltiples#

 1<?php
 2    $servidor = "localhost";
 3    $usuario = "guillermo";
 4    $clave = "guillermo";
 5    $base = "prueba";
 6
 7    $conn = new PDO("mysql:host=$servidor;dbname=$base", $usuario, $clave);
 8
 9    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
10    // Preparar consulta para separar parametros:
11    $sql = $conn->prepare("INSERT INTO agenda (nombre, edad) VALUES (:nombre, :edad)");
12    // preparar parametros:
13    $sql->bindParam(':nombre', $nombre);
14    $sql->bindParam(':edad', $edad);
15
16    // insertar mas de un registro a la vez:
17    $nombre = "Antonio";
18    $edad = 38;
19    $sql->execute();
20
21    $nombre = "Eustaquia";
22    $edad = 73;
23    $sql->execute();
24
25    echo "Inserciones realizadas correctamente";
26    $conn = null;
27?>

Atención

los bindParams se pueden usar en operaciones INSERT y en operaciones UPDATE

Leer registros#

 1<?php
 2    $servidor = "localhost";
 3    $usuario = "guillermo";
 4    $clave = "guillermo";
 5    $base = "prueba";
 6
 7    $conn = new PDO("mysql:host=$servidor;dbname=$base", $usuario, $clave);
 8
 9    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
10    // Preparar consulta:
11    $sql = $conn->query("SELECT * FROM agenda");
12    // Ejecutar consulta, ,fetch para registros individuales y fetchAll para multiples:
13    $sql = $sql->fetchAll(PDO::FETCH_ASSOC); // usar el parametro FETCH_ASSOC imprime de forma limpia.
14    // Recorrer todos los datos:
15    foreach($sql as $data){
16        echo "- " . $data['nombre'] . "\n";
17    }
18
19    $conn = null;
20?>

Borrar registros#

 1<?php
 2    $servidor = "localhost";
 3    $usuario = "guillermo";
 4    $clave = "guillermo";
 5    $base = "prueba";
 6
 7    $conn = new PDO("mysql:host=$servidor;dbname=$base", $usuario, $clave);
 8
 9    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
10    // Preparar consulta:
11    $sql = "DELETE FROM agenda WHERE id=1";
12    // ejecutar consulta:
13    $conn->exec($sql);
14
15    echo "Registro eliminado";
16
17    $con = null;
18?>

Actualizar registros#

 1<?php
 2    $servidor = "localhost";
 3    $usuario = "guillermo";
 4    $clave = "guillermo";
 5    $base = "prueba";
 6
 7    $conn = new PDO("mysql:host=$servidor;dbname=$base", $usuario, $clave);
 8
 9    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
10    // Preparar consulta:
11    $sql = "UPDATE agenda SET nombre='Elvira', edad=32 WHERE id=2";
12    // preparar estado:
13    $stmt = $conn->prepare($sql);
14    // ejecutar consulta:
15    $stmt->execute();
16
17    echo "Registro actualizado";
18
19    $con = null;
20?>