SlideShare una empresa de Scribd logo
1 de 7
Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
1.Conceptos básicos: BD, Tablas,Registros,Sistema Gestor de BD,SQL
Unidad X y XI
Herramientas de Base de Datos e Integración de Herramientas de Seguridad
Objetivo de la Unidad:
Desarrollar BD relacionales e inyecciones SQL en la base de datos a través de SGBD de código abierto para la
conexión y gestión de los datos de un sistema web
Definición
Una de las aplicaciones más frecuentes de PHP es generar una interfaz web para acceder y gestionar la
información almacenada en una base de datos. Usando PHP podemos mostrar en una página web información
extraída de la base de datos, o enviar sentencias al gestor de la base de datos para que elimine o actualice
algunos registros.
PHP soporta más de 15 sistemas gestores de bases de datos: SQLite, Oracle, SQL Server, PostgreSQL, IBM
DB2, MySQL, etc. Hasta la versión 5 de PHP, el acceso a las bases de datos se hacía principalmente utilizando
extensiones específicas para cada sistema gestor de base de datos (extensiones nativas). Es decir, que si
queríamos acceder a una base de datos de PostgreSQL, deberíamos instalar y utilizar la extensión de ese gestor
en concreto. Las funciones y objetos a utilizar eran distintos para cada extensión.
A partir de la versión 5 de PHP se introdujo en el lenguaje una extensión para acceder de una forma común a
distintos sistemas gestores: PDO. La gran ventaja de PDO está clara: podemos seguir utilizando una misma
sintaxis aunque cambiemos el motor de nuestra base de datos. Por el contrario, en algunas ocasiones
preferiremos seguir usando extensiones nativas en nuestros programas. Mientras PDO ofrece un conjunto
común de funciones, las extensiones nativas normalmente ofrecen más potencia (acceso a funciones específicas
de cada gestor de base de datos) y en algunos casos también mayor velocidad.
La extensión PDO nos facilitará mucho la vida a la hora de trabajar con bases de datos, ya que nos permite
abstraernos del tipo de gestor de base de datos que estemos utilizando. Esto quiere decir que sin el uso de PDO,
si por ejemplo decides migrar tu aplicación de MySQL a PostgreSQL tendrías que cambiar todos los métodos
Introducción
El objetivo de la presente guía, es facilitar el estudio sobre las técnicas para la creación de diseños de bases de
datos, su montaje en un sistema gestor de bases de datos (sgbd) como lo es postgres; para que a través de Crear,
Leer, Actualizar y Borrar (crud) para finalmente, orientar la creación de una aplicación que utilice Framework
css para facilitar la construcción de interfaces de usuario, el lenguaje de programación orientado a objetos PHP
y el uso del patrón mvc que permite tener una separación lógica y física de los componentes de la aplicación. El
uso de estos elementos se constituye en un patrón internacionalmente aceptado, faculta a su vez a los
diseñadores y desarrolladores de la aplicación y favorece a una excelente organización del trabajo.
Objetivo.
Diseñar bases de datos para la construcción de un crud con aplicaciones Web orientado a objeto a través de la
interfaz PDO utilizando el patrón mvc (modelo-vista-controlador).
Requerimientos.
Se debe contar con: Un (1) computador teniendo como mínimo el Sistema Operativo Libre ( Canaima/Ubuntu), Apache, PHP, Editor de
Texto.
Componentes.
Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
del conector de MySQL por los métodos de PostgreSQL. Con PDO bastaría con que se cambie únicamente la
creación del objeto PDO, donde se especifica el tipo de base de datos a conectar, y el resto de la aplicación
seguiría funcionando igual. Por lo que esta abstracción del acceso de datos convierte a esta extensión en un
elemento muy importante para la portabilidad de la aplicación/web.
Que es PDO
PDO (PHP Data Objects) proporciona una capa abstracta de acceso a bases de datos: independientemente de la
base de datos que se esté utilizando, PDO permite usar las mismas funciones para realizar consultas y obtener
datos. Sin embargo, PDO no proporciona una abstracción de las bases de datos, no reescribe las sentencias SQL
y no emula características ausentes en la base de datos. PDO se basa en las características de orientación a
objetos de PHP
La interfaz de PDO proporciona tres clases:
PDO: se encarga de gestionar las conexiones entre PHP y un servidor de bases de datos. Proporciona
métodos para gestionar las transacciones,obtener información sobre la conexión a la base de datos
y preparar y ejecutar sentencias.
PDOStatement: representa una sentencia preparada y el resultado asociado a una consulta. Proporciona
métodos para asignar valores a una sentencia preparada,para obtener información sobre un
resultado (número de columnas, número de filas) y para recorrer un resultado.
PDOException: representa una excepción,un error generado por PDO. Proporciona métodos para
obtener información sobre el error producido.
Clase PDO
Las conexiones se establecen creando instancias de la clase PDO. El constructor de esta clase acepta parámetros
para especificar el origen de datos (conocido como DSN, Data Source Name) y, opcionalmente, el nombre de
usuario, la contraseña y opciones para el controlador. Los métodos más importantes de esta clase son:
 exec(sentencia): ejecuta una sentencia SQL que no devuelva un resultado (por ejemplo,
INSERT,UPDATE o DELETE) y devuelve el número de filas afectadas.
 lastInsertId(): devuelve el ID autonumérico de la última fila insertada.
 prepare(sentencia): crea y devuelve una sentencia preparada para su posterior ejecución.
 query(sentencia): ejecuta una sentencia SQL y devuelve el resultado como un objeto de tipo
Clase PDOStatement.
La clase PDOStatement posee los siguientes métodos principales:
 bindParam(parametro, variable): vincula una variable a un parámetro en una sentencia preparada.
 bindValue(parametro, valor): vincula un valor a un parámetro en una sentencia preparada.
 columnCount(): devuelve el número de columnas de un resultado.
 execute(): ejecuta una sentencia preparada.
 fetch(estilo): devuelve la siguiente fila en un resultado. La forma de devolver la fila se controla con el
parámetro estilo que puede tomar los valores:
 PDO::FETCH_ASSOC: devuelve un array indexado por los nombres de las columnas del
resultado.
 PDO::FETCH_BOTH (predeterminado): devuelve un array indexado tanto por los nombres de las
columnas como por las posiciones de las columnas en el resultado comenzando por la columna 0.
 PDO::FETCH_NUM: devuelve un array indexado por las posiciones de las columnas en el
resultado comenzando por la columna 0.
 PDO::FETCH_OBJ: devuelve un objeto anónimo con nombres de propiedades que se
corresponden a los nombres de las columnas del resultado.
Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
 fetchAll(estilo): devuelve un array que contiene todas las filas de un resultado. La forma de devolver las
filas se controla con el parámetro estilo que puede tomar los mismos valores que el método fetch(estilo).
 fetchObject(): devuelve la siguiente fila de un resultado en forma de objeto.
 rowCount(): devuelve el número de filas afectadas por la última sentencia SQL.
Clase PDOException
Posee los siguientes métodos principales
getMessage():devuelve el mensaje de la excepción.
Por defecto, la generación de excepciones está desactivada y no se producen excepciones (sin embargo, cuando
se produce un error en la conexión, siempre se produce una excepción). Para activar la generación de
excepciones se debe emplear el método setAttribute para modificar el atributo de configuración de errores.
PDO::ATTR_ERRMODE con el valor PDO::ERRMODE_EXCEPTION:
PDO::ERRMODE_SILENT:el valor por defecto, no se generan excepciones (excepto para un error de
conexión).
PDO::ERRMODE_WARNING:los errores generan una advertencia de PHP y continúa la ejecución (útil para
depurar un código).
PDO::ERRMODE_EXCEPTION:se genera una excepción cuando se produce un error.
Veamos son Excepciones en PHP
Una excepción es un objeto derivado de la clase Exception de PHP que se encarga de mantener e informar de
cualquier error producido. Por lo tanto su uso principal es para detener la ejecución del programa, notificar de
errores y ayudar a depurar información.
Una excepción se creará ante una situación anómala en la ejecución del programa que provoca que este no
pueda continuar con normalidad.
Crear y capturar una excepción
Crear una excepción es tan sencillo como utilizar la siguiente sintaxis en el lugar que nos parezca adecuado:
throw new Exception('Mensaje a mostrar' );
Como podemos ver hemos usado uno de los dos parámetros opciones que se han comentado anteriormente.
Tras haber lanzado la excepción, necesitamos un mecanismo para capturar esta excepción y poder mostrar la
información que queramos del error y actuar en consecuencia al error. Para ello existe una estructura de control
llamada try/catch. De esta forma dividiremos el manejo de excepciones en dos partes:
- Dentro del bloque try se insertará el código que puede provocar una excepción. Ya que este bloque es el
encargado de parar la ejecución del script y pasar el control al bloque 'catch' cuando se produzca una excepción.
- Dentro de 'catch' introduciremos el código que controlará la excepción. Mostrando el error y aplicando la
funcionalidad necesaria para actuar ante elerror.
try {
// Codigo que puede lanzar excepciones }
catch ( Exception $excepcion ) {
// Codigo para controlar la excepcion }
echo "esto si que se ejecuta";
Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
Por lo tanto el uso de las excepciones se basa en dos etapas:
- Cuando ocurra algún error, una excepción será lanzada en un punto del script.
- Para mostrar elerror y actuar en consecuencia, es necesario capturar dicha excepción.
Establecimiento de conexiones.
Para establecer una conexión con una base de datos utilizando PDO, debes instanciar un objeto de la clase PDO
pasándole los siguientes parámetros (solo el primero es obligatorio):
 Origen de datos (DSN). Es una cadena de texto que indica qué controlador se va a utilizar y a continuación,
separadas por el carácter dos puntos, los parámetros específicos necesarios por el controlador, como por
ejemplo el nombre o dirección IP del servidor y el nombre de la base de datos.
 Puerto
 Nombre de usuario con permisos para establecer la conexión.
 Contraseña del usuario.
 Opciones de conexión, almacenadas en forma de array.
try {
$dsn = "pgsql:host=”localhost”; dbname=”bdprueba
$user=”postgres” // caso de sgbd postgres
$puerto = 5432; // puerto por defecto de postgres
$password = 'clave';
$dbh = new PDO($dsn, $puerto, $user, $password);
} catch (PDOException $e){
echo $e->getMessage();
}
$dbh, significa Database Handle, es elnombre de variable que se suele utilizar para el objeto PDO.
Ahora bien con el sistema gestor de base de datos Mysql las opciones de conexión es la siguiente:
try {
$dsn = "mysql: host=”localhost”; dbname=”bdprueba
$user=”root” // usuario por defecto de mysql
$password = 'clave'; // clave que colocas a la hora de instalar el mysql
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e){
echo $e->getMessage();
}
Registrar datos con PDO
La clase PDOStatement es la que trata las sentencias SQL. Una instancia de PDOStatement se crea cuando
se llama a PDO->prepare(), y con ese objeto creado se llama a métodos como bindParam() para pasar valores
o execute() para ejecutar sentencias. PDO facilita el uso de sentencias preparadas en PHP, que mejoran el
rendimiento y la seguridad de la aplicación. Cuando se obtienen, insertan o actualizan datos, el esquema
es: PREPARE -> [BIND] -> EXECUTE. Se pueden indicar los parámetros en la sentencia con un interrogante
"?" o mediante un nombre específico.
Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
Utilizando interrogantes para los valores
// Prepare
$stmt = $dbh->prepare("INSERT INTO Clientes (nombre, ciudad) VALUES (?,?)");
// Bind
$nombre = "Peter";
$ciudad = "Madrid";
$stmt->bindParam(1, $nombre);
$stmt->bindParam(2, $ciudad);
// Excecute
$stmt->execute();
// Bind
$nombre = "Martha";
$ciudad = "Cáceres";
$stmt->bindParam(1, $nombre);
$stmt->bindParam(2, $ciudad);
// Execute
$stmt->execute();
Utilizando variables para los valores
// Prepare
$stmt = $dbh->prepare("INSERT INTO Clientes (nombre, ciudad) VALUES (:nombre, :ciudad)");
// Bind
$nombre = "Charles";
$ciudad = "Valladolid";
$stmt->bindParam(':nombre', $nombre);
$stmt->bindParam(':ciudad', $ciudad);
// Excecute
$stmt->execute();
// Bind
$nombre = "Anne";
$ciudad = "Lugo";
$stmt->bindParam(':nombre', $nombre);
$stmt->bindParam(':ciudad', $ciudad);
// Execute
En la práctica bindValue() se
suele usar cuando se tienen
que insertar datos sólo una
vez, y bindParam() cuando se
tienen que pasar datos
múltiples (desde un array por
ejemplo).
Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
$stmt->execute();
Valores mediante un array (siempre array,aunque sólo haya un valor) al método execute():
// Prepare:
$stmt = $dbh->prepare("INSERT INTO Clientes (nombre, ciudad) VALUES (:nombre, :ciudad)");
$nombre = "Luis";
$ciudad = "Barcelona";
// Bind y execute:
if($stmt->execute(array(':nombre'=>$nombre, ':ciudad'=>$ciudad))) {
echo "Se ha creado el nuevo registro!";
}
Es el método execute() el que realmente envía los datos a la base de datos. Si no se llama a execute no se
obtendrán los resultados sino un error.
Una característica importante cuando se utilizan variables para pasar los valores es que se pueden insertar
objetos directamente en la base de datos, suponiendo que las propiedades coinciden con los nombres de las
variables:
class Clientes {
public $nombre;
public $ciudad;
public function __construct($nombre,$ciudad){
$this->nombre = $nombre;
$this->ciudad = $ciudad;
} // ....Código de la clase....
}
$cliente = new Clientes("Jennifer", "Málaga");
$stmt = $dbh->prepare("INSERT INTO Clientes (nombre, ciudad) VALUES (:nombre, :ciudad)");
if($stmt->execute((array) $cliente)){
echo "Se ha creado un nuevo registro!";
Consultar datos con PDO
La consulta de datos se realiza mediante PDOStatement::fetch,que obtiene la siguiente fila de un conjunto
de resultados.Antes de llamar a fetch (o durante) hay que especificar como se quieren devolver los datos
// FETCH_ASSOC
$stmt = $dbh->prepare("SELECT * FROM Clientes");
// Especificamos el fetch mode antes de llamar a fetch()
$stmt->setFetchMode(PDO::FETCH_ASSOC);
// Ejecutamos
Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
$stmt->execute();
// Mostramos los resultados
while ($row = $stmt->fetch()){
echo "Nombre: {$row["nombre"]} <br>";
echo "Ciudad: {$row["ciudad"]} <br><br>"; }
// FETCH_OBJ
$stmt = $dbh->prepare("SELECT * FROM Clientes");
// Ejecutamos
$stmt->execute();
// Ahora vamos a indicar el fetch mode cuando llamamos a fetch:
while($row = $stmt->fetch(PDO::FETCH_OBJ)){
echo "Nombre: " . $row->nombre . "<br>";
echo "Ciudad: " . $row->ciudad . "<br>";
PDOStatement::fetchAll(), que devuelve un array con todas las filas devueltas por la base de
datos con las que poder iterar. También acepta estilos de devolución:
// fetchAll() con PDO::FETCH_ASSOC
$stmt = $dbh->prepare("SELECT * FROM Clientes");
$stmt->execute();
$clientes = $stmt->fetchAll (PDO::FETCH_ASSOC);
foreach($clientes as $cliente){
echo $cliente['nombre'] . "<br>";}
// fetchAll() con PDO::FETCH_OBJ
$stmt = $dbh->prepare("SELECT * FROM Clientes");
$stmt->execute();
$clientes = $stmt->fetchAll(PDO::FETCH_OBJ);
foreach ($clientes as $cliente){
echo $cliente->nombre . "<br>";}
Referencias Bibliográficas
Un sitio clave para quienes programamos en PHP orientado a objetos es PHPClasses:
http://www.phpclasses.org
http://fpinformaticabox.blogspot.com/2018/
https://www.uno-de-piera.com/crud-con-php-y-postgresql/

Más contenido relacionado

La actualidad más candente

Tema 9 aplicaciones de dos capas por gio
Tema 9   aplicaciones de dos capas por gioTema 9   aplicaciones de dos capas por gio
Tema 9 aplicaciones de dos capas por gio
Robert Wolf
 
Tema 16 acceso a base de datos usando jpa por gio
Tema 16   acceso a base de datos usando jpa por gioTema 16   acceso a base de datos usando jpa por gio
Tema 16 acceso a base de datos usando jpa por gio
Robert Wolf
 

La actualidad más candente (20)

Guía PHP Orientado a Objeto con MVC
Guía PHP Orientado a Objeto con MVC Guía PHP Orientado a Objeto con MVC
Guía PHP Orientado a Objeto con MVC
 
Manual poo-unidad-visual-basic
Manual poo-unidad-visual-basicManual poo-unidad-visual-basic
Manual poo-unidad-visual-basic
 
Practica 1 html_basico
Practica 1 html_basicoPractica 1 html_basico
Practica 1 html_basico
 
desarrollo en 3 capas VB
desarrollo en 3 capas VBdesarrollo en 3 capas VB
desarrollo en 3 capas VB
 
Conexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysqlConexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysql
 
Guia bootstrap
Guia bootstrapGuia bootstrap
Guia bootstrap
 
Curso de pl sql básico
Curso de pl sql básicoCurso de pl sql básico
Curso de pl sql básico
 
Guia reportes
Guia reportesGuia reportes
Guia reportes
 
Taller programación web ajax con jquery
Taller programación web  ajax con jqueryTaller programación web  ajax con jquery
Taller programación web ajax con jquery
 
Ejemplo de base de datos y reports con jasper report
Ejemplo de base de datos y reports con jasper reportEjemplo de base de datos y reports con jasper report
Ejemplo de base de datos y reports con jasper report
 
Entrenamiento en Acceso a Datos con ASP.NET
Entrenamiento en Acceso a Datos con ASP.NETEntrenamiento en Acceso a Datos con ASP.NET
Entrenamiento en Acceso a Datos con ASP.NET
 
Uso java jdbc
Uso java jdbcUso java jdbc
Uso java jdbc
 
2 4 formularios_php
2 4 formularios_php2 4 formularios_php
2 4 formularios_php
 
Tema 9 aplicaciones de dos capas por gio
Tema 9   aplicaciones de dos capas por gioTema 9   aplicaciones de dos capas por gio
Tema 9 aplicaciones de dos capas por gio
 
Tema 16 acceso a base de datos usando jpa por gio
Tema 16   acceso a base de datos usando jpa por gioTema 16   acceso a base de datos usando jpa por gio
Tema 16 acceso a base de datos usando jpa por gio
 
Examen Sandra U Israel Oracle
Examen Sandra U Israel OracleExamen Sandra U Israel Oracle
Examen Sandra U Israel Oracle
 
1. guia css3
1. guia css31. guia css3
1. guia css3
 
Estructura de datos - Unidad 1: Introducción a las estructuras de datos
Estructura de datos - Unidad 1: Introducción a las estructuras de datosEstructura de datos - Unidad 1: Introducción a las estructuras de datos
Estructura de datos - Unidad 1: Introducción a las estructuras de datos
 
Herrera marcelo bdii_T7
Herrera marcelo bdii_T7Herrera marcelo bdii_T7
Herrera marcelo bdii_T7
 
Programación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetosProgramación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetos
 

Similar a Guía herramientas de BD PHP

Tema 15 aplicaciones de dos capas por gio
Tema 15   aplicaciones de dos capas por gioTema 15   aplicaciones de dos capas por gio
Tema 15 aplicaciones de dos capas por gio
Robert Wolf
 
Notas clase java ii
Notas clase java iiNotas clase java ii
Notas clase java ii
1 2d
 
Notas clase
Notas claseNotas clase
Notas clase
1 2d
 
Notas clase java ii
Notas clase java iiNotas clase java ii
Notas clase java ii
1 2d
 
Notas clase
Notas claseNotas clase
Notas clase
1 2d
 
Trabajo de sistemas de informacion
Trabajo de sistemas de informacionTrabajo de sistemas de informacion
Trabajo de sistemas de informacion
Evelin Oña
 
Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)
josecuartas
 
58517228 postgre sql-desarrolladoresbasico
58517228 postgre sql-desarrolladoresbasico58517228 postgre sql-desarrolladoresbasico
58517228 postgre sql-desarrolladoresbasico
Lucia Zambrano Franco
 
CREACION DE DLL Y USO (Ejemplo desarrollado)
CREACION DE DLL Y USO (Ejemplo desarrollado)CREACION DE DLL Y USO (Ejemplo desarrollado)
CREACION DE DLL Y USO (Ejemplo desarrollado)
Darwin Durand
 

Similar a Guía herramientas de BD PHP (20)

Tema 15 aplicaciones de dos capas por gio
Tema 15   aplicaciones de dos capas por gioTema 15   aplicaciones de dos capas por gio
Tema 15 aplicaciones de dos capas por gio
 
java con base de datos
java con base de datos java con base de datos
java con base de datos
 
POOABD (POO Aplicada a B Datos) - API JDBC - Parte 2
POOABD (POO Aplicada a B Datos) - API JDBC - Parte 2POOABD (POO Aplicada a B Datos) - API JDBC - Parte 2
POOABD (POO Aplicada a B Datos) - API JDBC - Parte 2
 
[ES] Conectividad de java a base de datos(jdbc)
[ES] Conectividad de java a base  de datos(jdbc)[ES] Conectividad de java a base  de datos(jdbc)
[ES] Conectividad de java a base de datos(jdbc)
 
Java con Base de Datos
Java con Base de Datos Java con Base de Datos
Java con Base de Datos
 
Java con base de datos
Java con base de datosJava con base de datos
Java con base de datos
 
Java con base de datos
Java con base de datosJava con base de datos
Java con base de datos
 
Java con base de datos
Java con base de datosJava con base de datos
Java con base de datos
 
Notas clase java ii
Notas clase java iiNotas clase java ii
Notas clase java ii
 
3. Curso Java JDBC (Bases de datos) - Curso 2005-2006
3. Curso Java JDBC (Bases de datos) - Curso 2005-20063. Curso Java JDBC (Bases de datos) - Curso 2005-2006
3. Curso Java JDBC (Bases de datos) - Curso 2005-2006
 
Notas clase
Notas claseNotas clase
Notas clase
 
Notas clase java ii
Notas clase java iiNotas clase java ii
Notas clase java ii
 
Notas clase
Notas claseNotas clase
Notas clase
 
Trabajar con bases de datos desde ASP.NET
Trabajar con bases de datos desde ASP.NETTrabajar con bases de datos desde ASP.NET
Trabajar con bases de datos desde ASP.NET
 
Trabajo de sistemas de informacion
Trabajo de sistemas de informacionTrabajo de sistemas de informacion
Trabajo de sistemas de informacion
 
Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)
 
Conexión de Base de Datos
Conexión de Base de DatosConexión de Base de Datos
Conexión de Base de Datos
 
Java con base de datos
Java con base de datosJava con base de datos
Java con base de datos
 
58517228 postgre sql-desarrolladoresbasico
58517228 postgre sql-desarrolladoresbasico58517228 postgre sql-desarrolladoresbasico
58517228 postgre sql-desarrolladoresbasico
 
CREACION DE DLL Y USO (Ejemplo desarrollado)
CREACION DE DLL Y USO (Ejemplo desarrollado)CREACION DE DLL Y USO (Ejemplo desarrollado)
CREACION DE DLL Y USO (Ejemplo desarrollado)
 

Más de lissette_torrealba

Más de lissette_torrealba (20)

Guiajquery
GuiajqueryGuiajquery
Guiajquery
 
Plan de evaluación proyecto i 2 teoría
Plan de evaluación proyecto i 2 teoríaPlan de evaluación proyecto i 2 teoría
Plan de evaluación proyecto i 2 teoría
 
Plan de evaluación proyecto i 2 metodología
Plan de evaluación proyecto i 2 metodologíaPlan de evaluación proyecto i 2 metodología
Plan de evaluación proyecto i 2 metodología
 
Plan de evaluacion proyecto i 2 práctica
Plan de evaluacion proyecto i 2 prácticaPlan de evaluacion proyecto i 2 práctica
Plan de evaluacion proyecto i 2 práctica
 
Guiajsvalidacion
GuiajsvalidacionGuiajsvalidacion
Guiajsvalidacion
 
Guiajs2
Guiajs2Guiajs2
Guiajs2
 
Rubrica 2021 electiva 2
Rubrica 2021 electiva 2Rubrica 2021 electiva 2
Rubrica 2021 electiva 2
 
Mapa Tecnopedagogia
Mapa TecnopedagogiaMapa Tecnopedagogia
Mapa Tecnopedagogia
 
Matriz DOFA lissette
Matriz DOFA lissetteMatriz DOFA lissette
Matriz DOFA lissette
 
Planevaluacionproyectoivpractica
PlanevaluacionproyectoivpracticaPlanevaluacionproyectoivpractica
Planevaluacionproyectoivpractica
 
Rubrica bd 2021
Rubrica  bd  2021Rubrica  bd  2021
Rubrica bd 2021
 
Proyecto formativo iv metodologia
Proyecto formativo iv metodologiaProyecto formativo iv metodologia
Proyecto formativo iv metodologia
 
Plan evaluacion teoria
Plan evaluacion teoriaPlan evaluacion teoria
Plan evaluacion teoria
 
Plan de Evaluacion
Plan de EvaluacionPlan de Evaluacion
Plan de Evaluacion
 
Ejemplos de interfaz grafica
Ejemplos de  interfaz grafica Ejemplos de  interfaz grafica
Ejemplos de interfaz grafica
 
Rubrica bd 2021
Rubrica bd 2021 Rubrica bd 2021
Rubrica bd 2021
 
Rubrica Programación II 2021
Rubrica Programación II 2021 Rubrica Programación II 2021
Rubrica Programación II 2021
 
Rup
RupRup
Rup
 
Documentosistema
DocumentosistemaDocumentosistema
Documentosistema
 
Guiaprueba
GuiapruebaGuiaprueba
Guiaprueba
 

Último

6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria
Wilian24
 
2° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
2° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx2° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
2° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
candy torres
 
Apunte clase teorica propiedades de la Madera.pdf
Apunte clase teorica propiedades de la Madera.pdfApunte clase teorica propiedades de la Madera.pdf
Apunte clase teorica propiedades de la Madera.pdf
Gonella
 
Las Preguntas Educativas entran a las Aulas CIAESA Ccesa007.pdf
Las Preguntas Educativas entran a las Aulas CIAESA  Ccesa007.pdfLas Preguntas Educativas entran a las Aulas CIAESA  Ccesa007.pdf
Las Preguntas Educativas entran a las Aulas CIAESA Ccesa007.pdf
Demetrio Ccesa Rayme
 

Último (20)

AEC 2. Aventura en el Antiguo Egipto.pptx
AEC 2. Aventura en el Antiguo Egipto.pptxAEC 2. Aventura en el Antiguo Egipto.pptx
AEC 2. Aventura en el Antiguo Egipto.pptx
 
Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024
 
activ4-bloque4 transversal doctorado.pdf
activ4-bloque4 transversal doctorado.pdfactiv4-bloque4 transversal doctorado.pdf
activ4-bloque4 transversal doctorado.pdf
 
UNIDAD 3 -MAYO - IV CICLO para cuarto grado
UNIDAD 3 -MAYO - IV CICLO para cuarto gradoUNIDAD 3 -MAYO - IV CICLO para cuarto grado
UNIDAD 3 -MAYO - IV CICLO para cuarto grado
 
Novena de Pentecostés con textos de san Juan Eudes
Novena de Pentecostés con textos de san Juan EudesNovena de Pentecostés con textos de san Juan Eudes
Novena de Pentecostés con textos de san Juan Eudes
 
Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024
 
1ERGRA~2.PDF EVALUACION DIAGNOSTICA 2024
1ERGRA~2.PDF EVALUACION DIAGNOSTICA 20241ERGRA~2.PDF EVALUACION DIAGNOSTICA 2024
1ERGRA~2.PDF EVALUACION DIAGNOSTICA 2024
 
Programa dia de las madres para la convi
Programa dia de las madres para la conviPrograma dia de las madres para la convi
Programa dia de las madres para la convi
 
6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria
 
animalesdelaproincia de beunos aires.pdf
animalesdelaproincia de beunos aires.pdfanimalesdelaproincia de beunos aires.pdf
animalesdelaproincia de beunos aires.pdf
 
Planeacion para 1er Grado - (2023-2024)-1.docx
Planeacion para 1er Grado - (2023-2024)-1.docxPlaneacion para 1er Grado - (2023-2024)-1.docx
Planeacion para 1er Grado - (2023-2024)-1.docx
 
GRUPO 2 - LA GRAN TRIBULACIÓN 25-03-2024 vf.pdf
GRUPO 2 - LA GRAN TRIBULACIÓN 25-03-2024 vf.pdfGRUPO 2 - LA GRAN TRIBULACIÓN 25-03-2024 vf.pdf
GRUPO 2 - LA GRAN TRIBULACIÓN 25-03-2024 vf.pdf
 
2° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
2° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx2° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
2° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
 
Apunte clase teorica propiedades de la Madera.pdf
Apunte clase teorica propiedades de la Madera.pdfApunte clase teorica propiedades de la Madera.pdf
Apunte clase teorica propiedades de la Madera.pdf
 
10-08 Avances tecnológicos del siglo XXI.pdf
10-08 Avances tecnológicos del siglo XXI.pdf10-08 Avances tecnológicos del siglo XXI.pdf
10-08 Avances tecnológicos del siglo XXI.pdf
 
Las Preguntas Educativas entran a las Aulas CIAESA Ccesa007.pdf
Las Preguntas Educativas entran a las Aulas CIAESA  Ccesa007.pdfLas Preguntas Educativas entran a las Aulas CIAESA  Ccesa007.pdf
Las Preguntas Educativas entran a las Aulas CIAESA Ccesa007.pdf
 
La Evaluacion Formativa SM6 Ccesa007.pdf
La Evaluacion Formativa SM6  Ccesa007.pdfLa Evaluacion Formativa SM6  Ccesa007.pdf
La Evaluacion Formativa SM6 Ccesa007.pdf
 
AEC2. Egipto Antiguo. Adivina, Adivinanza.pptx
AEC2. Egipto Antiguo. Adivina, Adivinanza.pptxAEC2. Egipto Antiguo. Adivina, Adivinanza.pptx
AEC2. Egipto Antiguo. Adivina, Adivinanza.pptx
 
FICHA CUENTO BUSCANDO UNA MAMÁ 2024 MAESTRA JANET.pdf
FICHA CUENTO BUSCANDO UNA MAMÁ  2024 MAESTRA JANET.pdfFICHA CUENTO BUSCANDO UNA MAMÁ  2024 MAESTRA JANET.pdf
FICHA CUENTO BUSCANDO UNA MAMÁ 2024 MAESTRA JANET.pdf
 
Lecciones 06 Esc. Sabática. Los dos testigos
Lecciones 06 Esc. Sabática. Los dos testigosLecciones 06 Esc. Sabática. Los dos testigos
Lecciones 06 Esc. Sabática. Los dos testigos
 

Guía herramientas de BD PHP

  • 1. Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba 1.Conceptos básicos: BD, Tablas,Registros,Sistema Gestor de BD,SQL Unidad X y XI Herramientas de Base de Datos e Integración de Herramientas de Seguridad Objetivo de la Unidad: Desarrollar BD relacionales e inyecciones SQL en la base de datos a través de SGBD de código abierto para la conexión y gestión de los datos de un sistema web Definición Una de las aplicaciones más frecuentes de PHP es generar una interfaz web para acceder y gestionar la información almacenada en una base de datos. Usando PHP podemos mostrar en una página web información extraída de la base de datos, o enviar sentencias al gestor de la base de datos para que elimine o actualice algunos registros. PHP soporta más de 15 sistemas gestores de bases de datos: SQLite, Oracle, SQL Server, PostgreSQL, IBM DB2, MySQL, etc. Hasta la versión 5 de PHP, el acceso a las bases de datos se hacía principalmente utilizando extensiones específicas para cada sistema gestor de base de datos (extensiones nativas). Es decir, que si queríamos acceder a una base de datos de PostgreSQL, deberíamos instalar y utilizar la extensión de ese gestor en concreto. Las funciones y objetos a utilizar eran distintos para cada extensión. A partir de la versión 5 de PHP se introdujo en el lenguaje una extensión para acceder de una forma común a distintos sistemas gestores: PDO. La gran ventaja de PDO está clara: podemos seguir utilizando una misma sintaxis aunque cambiemos el motor de nuestra base de datos. Por el contrario, en algunas ocasiones preferiremos seguir usando extensiones nativas en nuestros programas. Mientras PDO ofrece un conjunto común de funciones, las extensiones nativas normalmente ofrecen más potencia (acceso a funciones específicas de cada gestor de base de datos) y en algunos casos también mayor velocidad. La extensión PDO nos facilitará mucho la vida a la hora de trabajar con bases de datos, ya que nos permite abstraernos del tipo de gestor de base de datos que estemos utilizando. Esto quiere decir que sin el uso de PDO, si por ejemplo decides migrar tu aplicación de MySQL a PostgreSQL tendrías que cambiar todos los métodos Introducción El objetivo de la presente guía, es facilitar el estudio sobre las técnicas para la creación de diseños de bases de datos, su montaje en un sistema gestor de bases de datos (sgbd) como lo es postgres; para que a través de Crear, Leer, Actualizar y Borrar (crud) para finalmente, orientar la creación de una aplicación que utilice Framework css para facilitar la construcción de interfaces de usuario, el lenguaje de programación orientado a objetos PHP y el uso del patrón mvc que permite tener una separación lógica y física de los componentes de la aplicación. El uso de estos elementos se constituye en un patrón internacionalmente aceptado, faculta a su vez a los diseñadores y desarrolladores de la aplicación y favorece a una excelente organización del trabajo. Objetivo. Diseñar bases de datos para la construcción de un crud con aplicaciones Web orientado a objeto a través de la interfaz PDO utilizando el patrón mvc (modelo-vista-controlador). Requerimientos. Se debe contar con: Un (1) computador teniendo como mínimo el Sistema Operativo Libre ( Canaima/Ubuntu), Apache, PHP, Editor de Texto. Componentes.
  • 2. Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba del conector de MySQL por los métodos de PostgreSQL. Con PDO bastaría con que se cambie únicamente la creación del objeto PDO, donde se especifica el tipo de base de datos a conectar, y el resto de la aplicación seguiría funcionando igual. Por lo que esta abstracción del acceso de datos convierte a esta extensión en un elemento muy importante para la portabilidad de la aplicación/web. Que es PDO PDO (PHP Data Objects) proporciona una capa abstracta de acceso a bases de datos: independientemente de la base de datos que se esté utilizando, PDO permite usar las mismas funciones para realizar consultas y obtener datos. Sin embargo, PDO no proporciona una abstracción de las bases de datos, no reescribe las sentencias SQL y no emula características ausentes en la base de datos. PDO se basa en las características de orientación a objetos de PHP La interfaz de PDO proporciona tres clases: PDO: se encarga de gestionar las conexiones entre PHP y un servidor de bases de datos. Proporciona métodos para gestionar las transacciones,obtener información sobre la conexión a la base de datos y preparar y ejecutar sentencias. PDOStatement: representa una sentencia preparada y el resultado asociado a una consulta. Proporciona métodos para asignar valores a una sentencia preparada,para obtener información sobre un resultado (número de columnas, número de filas) y para recorrer un resultado. PDOException: representa una excepción,un error generado por PDO. Proporciona métodos para obtener información sobre el error producido. Clase PDO Las conexiones se establecen creando instancias de la clase PDO. El constructor de esta clase acepta parámetros para especificar el origen de datos (conocido como DSN, Data Source Name) y, opcionalmente, el nombre de usuario, la contraseña y opciones para el controlador. Los métodos más importantes de esta clase son:  exec(sentencia): ejecuta una sentencia SQL que no devuelva un resultado (por ejemplo, INSERT,UPDATE o DELETE) y devuelve el número de filas afectadas.  lastInsertId(): devuelve el ID autonumérico de la última fila insertada.  prepare(sentencia): crea y devuelve una sentencia preparada para su posterior ejecución.  query(sentencia): ejecuta una sentencia SQL y devuelve el resultado como un objeto de tipo Clase PDOStatement. La clase PDOStatement posee los siguientes métodos principales:  bindParam(parametro, variable): vincula una variable a un parámetro en una sentencia preparada.  bindValue(parametro, valor): vincula un valor a un parámetro en una sentencia preparada.  columnCount(): devuelve el número de columnas de un resultado.  execute(): ejecuta una sentencia preparada.  fetch(estilo): devuelve la siguiente fila en un resultado. La forma de devolver la fila se controla con el parámetro estilo que puede tomar los valores:  PDO::FETCH_ASSOC: devuelve un array indexado por los nombres de las columnas del resultado.  PDO::FETCH_BOTH (predeterminado): devuelve un array indexado tanto por los nombres de las columnas como por las posiciones de las columnas en el resultado comenzando por la columna 0.  PDO::FETCH_NUM: devuelve un array indexado por las posiciones de las columnas en el resultado comenzando por la columna 0.  PDO::FETCH_OBJ: devuelve un objeto anónimo con nombres de propiedades que se corresponden a los nombres de las columnas del resultado.
  • 3. Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba  fetchAll(estilo): devuelve un array que contiene todas las filas de un resultado. La forma de devolver las filas se controla con el parámetro estilo que puede tomar los mismos valores que el método fetch(estilo).  fetchObject(): devuelve la siguiente fila de un resultado en forma de objeto.  rowCount(): devuelve el número de filas afectadas por la última sentencia SQL. Clase PDOException Posee los siguientes métodos principales getMessage():devuelve el mensaje de la excepción. Por defecto, la generación de excepciones está desactivada y no se producen excepciones (sin embargo, cuando se produce un error en la conexión, siempre se produce una excepción). Para activar la generación de excepciones se debe emplear el método setAttribute para modificar el atributo de configuración de errores. PDO::ATTR_ERRMODE con el valor PDO::ERRMODE_EXCEPTION: PDO::ERRMODE_SILENT:el valor por defecto, no se generan excepciones (excepto para un error de conexión). PDO::ERRMODE_WARNING:los errores generan una advertencia de PHP y continúa la ejecución (útil para depurar un código). PDO::ERRMODE_EXCEPTION:se genera una excepción cuando se produce un error. Veamos son Excepciones en PHP Una excepción es un objeto derivado de la clase Exception de PHP que se encarga de mantener e informar de cualquier error producido. Por lo tanto su uso principal es para detener la ejecución del programa, notificar de errores y ayudar a depurar información. Una excepción se creará ante una situación anómala en la ejecución del programa que provoca que este no pueda continuar con normalidad. Crear y capturar una excepción Crear una excepción es tan sencillo como utilizar la siguiente sintaxis en el lugar que nos parezca adecuado: throw new Exception('Mensaje a mostrar' ); Como podemos ver hemos usado uno de los dos parámetros opciones que se han comentado anteriormente. Tras haber lanzado la excepción, necesitamos un mecanismo para capturar esta excepción y poder mostrar la información que queramos del error y actuar en consecuencia al error. Para ello existe una estructura de control llamada try/catch. De esta forma dividiremos el manejo de excepciones en dos partes: - Dentro del bloque try se insertará el código que puede provocar una excepción. Ya que este bloque es el encargado de parar la ejecución del script y pasar el control al bloque 'catch' cuando se produzca una excepción. - Dentro de 'catch' introduciremos el código que controlará la excepción. Mostrando el error y aplicando la funcionalidad necesaria para actuar ante elerror. try { // Codigo que puede lanzar excepciones } catch ( Exception $excepcion ) { // Codigo para controlar la excepcion } echo "esto si que se ejecuta";
  • 4. Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba Por lo tanto el uso de las excepciones se basa en dos etapas: - Cuando ocurra algún error, una excepción será lanzada en un punto del script. - Para mostrar elerror y actuar en consecuencia, es necesario capturar dicha excepción. Establecimiento de conexiones. Para establecer una conexión con una base de datos utilizando PDO, debes instanciar un objeto de la clase PDO pasándole los siguientes parámetros (solo el primero es obligatorio):  Origen de datos (DSN). Es una cadena de texto que indica qué controlador se va a utilizar y a continuación, separadas por el carácter dos puntos, los parámetros específicos necesarios por el controlador, como por ejemplo el nombre o dirección IP del servidor y el nombre de la base de datos.  Puerto  Nombre de usuario con permisos para establecer la conexión.  Contraseña del usuario.  Opciones de conexión, almacenadas en forma de array. try { $dsn = "pgsql:host=”localhost”; dbname=”bdprueba $user=”postgres” // caso de sgbd postgres $puerto = 5432; // puerto por defecto de postgres $password = 'clave'; $dbh = new PDO($dsn, $puerto, $user, $password); } catch (PDOException $e){ echo $e->getMessage(); } $dbh, significa Database Handle, es elnombre de variable que se suele utilizar para el objeto PDO. Ahora bien con el sistema gestor de base de datos Mysql las opciones de conexión es la siguiente: try { $dsn = "mysql: host=”localhost”; dbname=”bdprueba $user=”root” // usuario por defecto de mysql $password = 'clave'; // clave que colocas a la hora de instalar el mysql $dbh = new PDO($dsn, $user, $password); } catch (PDOException $e){ echo $e->getMessage(); } Registrar datos con PDO La clase PDOStatement es la que trata las sentencias SQL. Una instancia de PDOStatement se crea cuando se llama a PDO->prepare(), y con ese objeto creado se llama a métodos como bindParam() para pasar valores o execute() para ejecutar sentencias. PDO facilita el uso de sentencias preparadas en PHP, que mejoran el rendimiento y la seguridad de la aplicación. Cuando se obtienen, insertan o actualizan datos, el esquema es: PREPARE -> [BIND] -> EXECUTE. Se pueden indicar los parámetros en la sentencia con un interrogante "?" o mediante un nombre específico.
  • 5. Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba Utilizando interrogantes para los valores // Prepare $stmt = $dbh->prepare("INSERT INTO Clientes (nombre, ciudad) VALUES (?,?)"); // Bind $nombre = "Peter"; $ciudad = "Madrid"; $stmt->bindParam(1, $nombre); $stmt->bindParam(2, $ciudad); // Excecute $stmt->execute(); // Bind $nombre = "Martha"; $ciudad = "Cáceres"; $stmt->bindParam(1, $nombre); $stmt->bindParam(2, $ciudad); // Execute $stmt->execute(); Utilizando variables para los valores // Prepare $stmt = $dbh->prepare("INSERT INTO Clientes (nombre, ciudad) VALUES (:nombre, :ciudad)"); // Bind $nombre = "Charles"; $ciudad = "Valladolid"; $stmt->bindParam(':nombre', $nombre); $stmt->bindParam(':ciudad', $ciudad); // Excecute $stmt->execute(); // Bind $nombre = "Anne"; $ciudad = "Lugo"; $stmt->bindParam(':nombre', $nombre); $stmt->bindParam(':ciudad', $ciudad); // Execute En la práctica bindValue() se suele usar cuando se tienen que insertar datos sólo una vez, y bindParam() cuando se tienen que pasar datos múltiples (desde un array por ejemplo).
  • 6. Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba $stmt->execute(); Valores mediante un array (siempre array,aunque sólo haya un valor) al método execute(): // Prepare: $stmt = $dbh->prepare("INSERT INTO Clientes (nombre, ciudad) VALUES (:nombre, :ciudad)"); $nombre = "Luis"; $ciudad = "Barcelona"; // Bind y execute: if($stmt->execute(array(':nombre'=>$nombre, ':ciudad'=>$ciudad))) { echo "Se ha creado el nuevo registro!"; } Es el método execute() el que realmente envía los datos a la base de datos. Si no se llama a execute no se obtendrán los resultados sino un error. Una característica importante cuando se utilizan variables para pasar los valores es que se pueden insertar objetos directamente en la base de datos, suponiendo que las propiedades coinciden con los nombres de las variables: class Clientes { public $nombre; public $ciudad; public function __construct($nombre,$ciudad){ $this->nombre = $nombre; $this->ciudad = $ciudad; } // ....Código de la clase.... } $cliente = new Clientes("Jennifer", "Málaga"); $stmt = $dbh->prepare("INSERT INTO Clientes (nombre, ciudad) VALUES (:nombre, :ciudad)"); if($stmt->execute((array) $cliente)){ echo "Se ha creado un nuevo registro!"; Consultar datos con PDO La consulta de datos se realiza mediante PDOStatement::fetch,que obtiene la siguiente fila de un conjunto de resultados.Antes de llamar a fetch (o durante) hay que especificar como se quieren devolver los datos // FETCH_ASSOC $stmt = $dbh->prepare("SELECT * FROM Clientes"); // Especificamos el fetch mode antes de llamar a fetch() $stmt->setFetchMode(PDO::FETCH_ASSOC); // Ejecutamos
  • 7. Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba $stmt->execute(); // Mostramos los resultados while ($row = $stmt->fetch()){ echo "Nombre: {$row["nombre"]} <br>"; echo "Ciudad: {$row["ciudad"]} <br><br>"; } // FETCH_OBJ $stmt = $dbh->prepare("SELECT * FROM Clientes"); // Ejecutamos $stmt->execute(); // Ahora vamos a indicar el fetch mode cuando llamamos a fetch: while($row = $stmt->fetch(PDO::FETCH_OBJ)){ echo "Nombre: " . $row->nombre . "<br>"; echo "Ciudad: " . $row->ciudad . "<br>"; PDOStatement::fetchAll(), que devuelve un array con todas las filas devueltas por la base de datos con las que poder iterar. También acepta estilos de devolución: // fetchAll() con PDO::FETCH_ASSOC $stmt = $dbh->prepare("SELECT * FROM Clientes"); $stmt->execute(); $clientes = $stmt->fetchAll (PDO::FETCH_ASSOC); foreach($clientes as $cliente){ echo $cliente['nombre'] . "<br>";} // fetchAll() con PDO::FETCH_OBJ $stmt = $dbh->prepare("SELECT * FROM Clientes"); $stmt->execute(); $clientes = $stmt->fetchAll(PDO::FETCH_OBJ); foreach ($clientes as $cliente){ echo $cliente->nombre . "<br>";} Referencias Bibliográficas Un sitio clave para quienes programamos en PHP orientado a objetos es PHPClasses: http://www.phpclasses.org http://fpinformaticabox.blogspot.com/2018/ https://www.uno-de-piera.com/crud-con-php-y-postgresql/