===== PHP 7 ===== .. image:: /logos/logo-php.png :scale: 15% :alt: Logo PHP :align: center .. |date| date:: .. |time| date:: %H:%M Última edición el día |date| a las |time|. Esta es la documentación que he recopilado para trabajar con PHP 7, el lenguaje de la web y uno de los mas usados para desarrollo backend. .. contents:: Índice Elementos básicos del lenguaje ############################## Comentarios *********** Los comentarios se pueden realizar de dos tipos: * Comentarios de una sola línea: .. code:: php // Comentario de una sola línea * Comentarios multilínea: .. code:: php ''' /* Este comentario tiene más de una línea. Puede servir para escribir un manual u otras cosas. */ ''' Estructura en php ****************** La estructura de PHP 7 se presenta de un modo similar a lenguajes como C o Perl: * Un vistazo a PHP puro: .. code:: php // el código php se inicia siempre con su simbolo menor que interrogación y php: // y finaliza del mismo modo * Ejecutando código php junto a HTML: .. code:: php

* También podemos cargar etiquetas HTML con PHP: .. code:: php Etiqueta incrustada desde php

"; ?> Otro dato importante como en la mayoría de lenguajes hay que evitar la ausencia de ; ya que en algunos casos no da error pero en otros si. .. attention:: Para cargar los archivos PHP correctamente desde el navegador deben estar alojados en la carpeta del directorio web. Extensión ********* La extensión utilizada por los archivos php es ``php`` Ejecución ********* Existen dos métodos para ejecutar código PHP: * El primero y mas común es cargar el archivo desde la url en el servidor local o remoto. * El segundo es ejecutandolo desde PHP-CLI, por ejemplo: ``php hola.php``. Muy útil para probar partes del código. .. important:: Para utilizar PHP-CLI tenemos que instalarlo ejecutando ``sudo apt install php7.4-cli`` Información de nuestro servidor ******************************* Si queremos conocer la información de nuestro servidor basta con crearnos un archivo con el nombre por ejemplo info.php y añadir la siguiente función: .. code:: php Abrimos el archivo en el navegador desde el servidor y se mostrará toda la info de este. Documentación de PHP oficial **************************** La documentación oficial de php nos brinda cientos de funciones que pueden ayudarnos en nuestro día a dia. Podemos acceder en el siguiente `enlace `_. Palabras reservadas de PHP 7 ***************************** En php existen las siguientes palabras reservadas: * __halt_compiler() * abstract * and * array() * as * break * callable * clase * catch * class * clone * const * continue * declare * default * die() * do * echo * else * elseif * empty() * enddeclare * endfor * endforeach * endif * endswitch * endwhile * eval() * exit() * extends * final * finally * for * foreach * function * global * goto * if * implements * include * include_once * instanceof * insteadof * interface * isset() * list() * namespace * new * or * print * private * protected * public * require * require_once * return * static * switch * throw * trait * try * unset() * use * var * while * xor * yield * yield from Variables y tipos de datos ########################## Variables ********* Las variables se definen de forma similar a Perl, con una llave inicial. Ejemplo: .. code:: php .. attention:: Es imprescindible almacenar contenido en las variables para que no genere errores. Por ejemplo poner unas comillas "". Constantes ********** Para definir constantes tenemos que recurrir a una función llamada define() Ejemplo: .. code:: php Tipos de datos primitivos ************************* Los tipos de datos mas comunes son los siguientes: +------------------+-----------------------------------------------+-----------------------------+ | Tipo de dato | Denominación | Ejemplo | +==================+===============================================+=============================+ | string | Cadena de texto | 'cadena', "cadena" | +------------------+-----------------------------------------------+-----------------------------+ | integer | Número Entero | 20, 5, -3, 0 | +------------------+-----------------------------------------------+-----------------------------+ | float | Número con decimales | 20.53, 12.5, -18.353 | +------------------+-----------------------------------------------+-----------------------------+ | bool | Verdadero o falso | true, false | +------------------+-----------------------------------------------+-----------------------------+ | array | Matriz de datos | array('valor', 'otro_valor')| +------------------+-----------------------------------------------+-----------------------------+ | array asociativo | Objeto con orden de tipo clave:valor | array('clave' => 'valor') | +------------------+-----------------------------------------------+-----------------------------+ Ejemplos: .. code:: php $cadena = "Dia de paga" $otraCadena = 'Cadena de comillas simples es lo mismo' $entero = 27 $decimal = 22.83 $booleano = true $array = array(2.4, true, 6, 'Metro'); $array_asociativo = array( 'nombre' => 'Guillermo', 'apellidos' => 'Granados Gómez', 'telefono' => '744607487', 'ciudad' => 'Málaga' ); Entrada y Salida de datos ######################### Para realizar la entrada de datos en PHP al ser un lenguaje definido para web se utilizan formularios y se realiza mediante POST: * Entrada de datos: .. code:: php * Salida de datos: .. code:: php Luego para concatenar utilizamos el ``.`` en cada elemento: .. code:: php Operadores ########## Operadores Aritméticos ********************** Los operadores aritméticos que se presentan en php son los mismos que en la mayoría de lenguajes, ``+, -, *, /, %`` Estos podemos utilizarlos del siguiente modo: .. code:: php Operadores Relacionales *********************** Los operadores relacionales en php son los mismos que en la mayoría de lenguajes de programación: +-----------------+---------+ | Operador | símbolo | +=================+=========+ | Mayor que | > | +-----------------+---------+ | Menor que | < | +-----------------+---------+ | Igual que | == | +-----------------+---------+ | Mayor igual que | >= | +-----------------+---------+ | Menor igual que | <= | +-----------------+---------+ Cuando hablamos del uso de un solo ``=`` nos referimos a la asignación de un valor en una variable. Como en muchos lenguajes, si imprimimos por consola la relación entre un valor y otro el resultado será True o False: .. code:: php Operadores Lógicos ****************** En php se utilizan los mismos operadores lógicos que en la mayoría de lenguajes de programación, sin embargo presentan un aspecto diferente: +-----------+-----------+------------------------------------------------------------+ | Operador | símbolo | condición | +===========+===========+============================================================+ | Y (and) | && | La condición se cumple si todos son verdaderos | +-----------+-----------+------------------------------------------------------------+ | O (or) | || | La condición se cumple si al menos uno es verdadero | +-----------+-----------+------------------------------------------------------------+ | NO (not) | ! | La condición se cumple si es diferente a lo que se compara | +-----------+-----------+------------------------------------------------------------+ Ejemplos: .. code:: php # Resultado False: print(5 > 7 && 3 < 6) # Resultado True: print(5 > 7 || 3 < 6) # Resultado True print(6 != 3) Asignación ********** Nos permiten asignar datos a variables. Esto ya lo hemos visto también en ejemplos anteriores: .. code:: php Con este último operaremos con el valor asignado sumando, restando, multiplicando o dividiendo el valor que ya posee. Estructuras de control ###################### En php disponemos de estructuras de control como ``if``, ``switch``, ``for`` y ``while``. Condicional if ************** Las condiciones sencillas en php funcionan del siguiente modo: .. code:: php También tenemos condiciones con una salida alternativa si no se cumple esta: .. code:: php Condicional if-else if ********************** Las condiciones compuestas nos ofrecen varios caminos posibles: .. code:: php $edad = 66: if($edad >= 18){ echo 'Eres mayor de edad'; }else if($edad < 18){ echo 'Eres menor de edad'; }else if($edad >= 65){ echo 'Ya eres un anciano'; }else{ echo 'No es una edad correcta'; Condicional Switch ****************** El switch podemos utilizarlo para tomar distintos caminos fijos. Se utiliza a menudo en PHP. .. code:: php Bucle for ********* El bucle for en php se presenta de un modo muy similar al de lenguajes como Javascript o Perl: * Uso con rango definido: .. code:: php * Bucle for multidimensional: .. code:: php "; for($i = 0; $i <= 10; $i++){ echo " "; for($j = 0; $j <= 10; $j++){ echo "" . $i . ""; } echo ""; } echo ""; ?> Bucle foreach ************* El bucle diseñado para iterar con matrices de datos en PHP, el cual es similar a for-in que se utiliza en Python o Javascript: .. code:: php "; } ?> Bucle while *********** El bucle While es similar a Perl o Javascript entro otros. * Ejemplo de bucle while: .. code:: php * Bucle do-while: .. code:: php Estructuras de datos #################### Matrices ******** Las matrices o arrays en PHP son bastante útiles para organizar datos. .. code:: php * Recorrer valores de una matriz e imprimirlos con ``for``: .. code:: php "; for($i = 0; $i <= 3; $i++){ echo "- " . $transporte[$i] . "
"; } ?> * Ver cuantos elementos hay en una lista con ``count()``: .. code:: php * Imprime un elemento de la lista por su posición: .. code:: php * Borra el último elemento de la lista con ``array_pop()``: .. code:: php * Borrar un elemento por su posición con ``unset()``: .. code:: php * Añadir un elemento al final de la lista con ``array_push()``: .. code:: php * Convertir lista a cadena de texto con ``implode()``: .. code:: php * Ordenar elementos de listas por orden numérico o alfabético: .. code:: php * Verificar si se encuentra un elemento en la lista y devuelve true o false: .. code:: php Array Asociativos ***************** Los arrays asociativos vienen a ser lo mismo que los diccionarios en Python o los Objetos en Javascript. Se construye por pares de datos que son clave y valor del mismo modo que en Python o Javascript. Ejemplo de uso: .. code:: php "Guillermo", "ciudad" => "Málaga" ); ?> * Imprimir un valor del diccionario: .. code:: php * Ver la estructura del array con ``print_r()``: .. code:: php * Recuperar solo las claves del diccionario con ``array_keys()``: .. code:: php * Recorrer e imprimir todos los elementos del array asociativo: .. code:: php * Recorrer e imprimir todos los elementos por clave => valor: .. code:: php $valor){ echo $clave . ": " . $valor . "\n"; } ?> Arrays asociativos multidimensionales ##################################### Los arrays asociativos multidimensionales son similares a arrays de objetos o listas de diccionarios según que lenguaje. * Añadiendo los valores de forma manual: .. code:: * Añadiendo los valores de forma masiva: .. code:: php array( 'nombre' => "Eduardo", 'apellidos' => "Lopez Aguirre", 'telefono' => "667248135", 'ciudad' => "Sevilla" ), 1 => array( 'nombre' => "Antonia", 'apellidos' => "Martinez Santos", 'telefono' => "67748970", 'ciudad' => "Cádiz" ), 2 => array( 'nombre' => "Enrique", 'apellidos' => "Casas Nuñez", 'telefono' => "609752147", 'ciudad' => "Madrid" ) ); // Del mismo modo podemos imprimir los valores: echo "Me llamo " . $datos[2]['nombre'] . " " . $datos[2]['apellidos'] . " soy de " . $datos[2]['ciudad'] . " y mi número de teléfono es: " . $datos[2]['telefono']; ?> Recorrer array multidimensional asociativo con foreach ****************************************************** Gracias al uso del **foreach** nuestro trabajo siempre será mas sencillo aunque se trate de un array multidimensional: .. code:: php array( 'nombre' => "Eduardo", 'apellidos' => "Lopez Aguirre", 'telefono' => "667248135", 'ciudad' => "Sevilla" ), 1 => array( 'nombre' => "Antonia", 'apellidos' => "Martinez Santos", 'telefono' => "67748970", 'ciudad' => "Cádiz" ), 2 => array( 'nombre' => "Enrique", 'apellidos' => "Casas Nuñez", 'telefono' => "609752147", 'ciudad' => "Madrid" ) ); echo ""; echo ""; // Con foreach ya no es necesario pasarle una variable de incremento al índice porque el bucle ya recorre todo el array horizontal y verticalmente. foreach($datos as $listado){ echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; } echo "
Nombre Apellidos Teléfono Ciudad
" . $listado['nombre'] . "" . $listado['apellidos'] . "" . $listado['telefono'] . "" . $listado['ciudad'] . "
"; ?> Funciones Internas ################## Como en la mayoría de lenguajes de programación, en php existen funciones predefinidas. Funciones de cadenas ******************** Aquí tenemos las funciones mas utilizadas para tratamiento de cadenas de texto: * Para saber la longitud de una cadena con ``strlen()``: .. code:: php * Convertir valor numérico a cadena con ``(String)``: .. code:: php * Convertir una cadena en una lista ``explode()``: .. code:: php * Reemplazar una cadena por otra con ``str_replace()``: .. code:: php * Convertir a mayúsculas la cadena con ``strtoupper()``: .. code:: php * Convertir a minúsculas la cadena con ``strtolower()``: .. code:: php Funciones numéricas ******************* Estas son las funciones numéricas mas comunes en php: * Convertir un valor a entero con ``(int)``: .. code:: php * Convertir un valor a decimal con ``(float)``: .. code:: php * Redondear un valor decimal con ``round()``: .. code:: php * Crear un rango de números con ``range()``: .. code:: php * Mostrar el valor mayor de un rango con ``max()``: .. code:: php * Mostrar el valor mínimo de un rango con ``min()``: .. code:: php * Sumar todos los valores de un rango con ``array_sum()``: .. code:: php Otras funciones comunes *********************** Tenemos una serie de funciones de uso común en php: * Averiguar que tipo de dato contiene una variable con ``gettype()``: .. code:: php * Trabajar las fechas con la función ``date()``: .. code:: php "; echo "Inicial del día: " . date('D') . "
"; echo "Día de la semana: " . date('l') . "
"; echo "Días transcurridos desde que comenzó el año: " . date('z') . "
"; echo "Semanas transcurridas desde que comenzó el año: " . date('W') . "
"; echo "Mes en el que estoy: " . date('m') . "
"; echo "Mes en el que estoy sin cero: " . date('n') . "
"; echo "Iniciales del mes el que estoy sin cero: " . date('M') . "
"; echo "Dias que tiene el mes en el que estoy: " . date('t') . "
"; echo "Año en el que estoy: " . date('Y') . "
"; echo "Año abreviado: " . date('y') . "
"; // Si nos da 0 es false y si da 1 es true: echo "Saber si es año bisiesto: " . date('L') . "
"; echo "Fecha formato ISO-8601: " . date('c') . "
"; // Este formato es ideal para almacenar fechas en bases de datos: echo "Hora UNIX: " . date('U') . "
"; // AJUSTES DE TIEMPO: echo "Hora AM o PM: " . date('a') . "
"; echo "Hora AM o PM en mayúsculas: " . date('A') . "
"; echo "Hora en formato Swatch Internet Time : " . date('B') . "
"; echo "Hora en formato 12: " . date('g') . "
"; echo "Hora en formato 24: " . date('G') . "
"; echo "Hora formato 12 con 0 inicial: " . date('h') . "
"; echo "Hora formato 24 con 0 inicial: " . date('H') . "
"; echo "Minutos con cero: " . date('i') . "
"; echo "Segundos con ceros: " . date('s') . "
"; echo "Microsengundos: " . date('u') . "
"; echo "Zona temporal: " . date('e') . "
"; // 0 false, 1 true: echo "Horario de sol reducido: " . date('I') . "
"; echo "Desfase frente al meridiano de Greenwitch: " . date('O') . "
"; ?> * Comprobar si existe una variable con ``isset()`` y eliminarla con ``unset()``: .. code:: php "; unset($valor); if(isset($valor)){ echo "La variable tiene un valor igual a " . $valor . "
"; }else{ echo "Ya no tiene ningún valor"; } ?> Funciones ######### Las funciones en php se declaran del siguiente modo: .. code:: php * Recibir parametros en una función: .. code:: php "; } } tablas(5); ?> Ambito en funciones ******************** El ambito de las funciones en php nos facilita el uso de variables que se encuentran fuera de una función para poder manejarlas sin tener que pasarlas por parámetros. ejemplo: .. code:: php * Recibir parametros infinitos añadiendo ``*`` a un parametro: .. code:: php def miFuncion(*unNombre): for persona in unNombre: print("Se llama {}".format(persona)) miFuncion("Pepe", "Antonio", "Alfredo") Variables predefinidas ###################### PHP cuenta con un set de variables predefinidas disponibles en cualquier parte del programa para tratar distintos aspectos como peticiones GET y POST, recuperar archivos con FILES, etc. Variable GET ************ Con **$_GET** Recuperamos la información recibida por parametros en la barra de navegación. Esto muestra la información que recibimos como ya es de saber: .. code:: php

Variable POST ************* Podemos enviar los datos via post y utilizar la variable **$_POST** para recuperarlos: .. code:: php

Variable SERVER *************** Con la variable **$_SERVER** podemos recuperar información de quien visita la web. Estas son algunas de las cosas que podemos recuperar: .. code:: php "; // Para saber el puerto que esta usando el cliente: $puerto = $_SERVER['REMOTE_PORT']; echo "Estas usando el puerto: " . $puerto . "
"; // Para saber la ip del servidor: $serverIP = $_SERVER['SERVER_ADDR']; echo "La ip del servidor es: " . $serverIP . "
"; // Para saber el nombre del Servidor (por defecto la ip de este si no tiene nombre definido): $host = $_SERVER['SERVER_NAME']; echo "El nombre del servidor es: " . $host . "
"; //Para saber el navegador: $navegador = $_SERVER['HTTP_USER_AGENT']; echo "Tu navegador es: " . $navegador . "
"; //Para saber el archivo donde te encuentras de la web: $ruta = $_SERVER['PHP_SELF']; echo "Estas en: " . $ruta . "
"; //El metodo con el que se esta procesando la url: $metodo = $_SERVER['REQUEST_METHOD']; echo "Se esta usando el Método: " . $metodo . "
"; //Ver la url que se utilizo para realizar la petición: $uri = $_SERVER['REQUEST_URI']; echo "Se esta usando el Método: " . $uri . "
"; //Visualizar la raiz del directorio donde se encuentra el archivo: $raiz = $_SERVER['DOCUMENT_ROOT']; echo "La raiz del servidor es: " . $raiz . "
"; //Ofrece un valor no vacío si la petición se realiza en https: $peticion_segura = $_SERVER['HTTPS']; echo "Se vera algo si estamos usando https: " . $peticion_segura . "
"; ?> Variable FILES ************** La variable **$_FILES** recupera un archivo subido desde un formulario. Ejemplo de uso: .. code:: php
"; print_r($_FILES['archivo']); echo ""; ?> Variable SESSION **************** La variable **$_SESSION** se utiliza para recordar datos en el navegador del cliente como usuarios, procesos de compras y otras cosas. Ejemplo de uso: .. code:: php Clases ###### PHP se ha ido adaptando al paso del tiempo desde su propósito inicial como lenguaje de servidor hasta llegar a alcanzar una sintaxis muy parecida a otros lenguajes de alto nivel. Entre estas mejoras ya disponemos del paradigma orientado a objetos. * Creación de clases con atributos, metodo y creación del objeto: .. code:: php nombre = $nombre; $this->edad = $edad; } // Y definimos abajo los métodos: function saludar(){ echo "Te llamas " . $this->nombre . " y tienes " . $this->edad . " años."; } } // crear objeto: $persona = new Persona("Agustín", 32); // acceder a sus atributos: echo $persona->nombre . "\n"; // acceder a sus métodos $persona->saludar(); ?> .. important:: Los atributos siempre tienen que llevar un modificador de acceso como public o private o protected pero los metodos si no lo definimos por defecto son public. Tipos de encapsulación en PHP ***************************** Existen tres tipos de encapsulación en PHP: * public: los atributos y métodos son publicos y por tanto se puede acceder a ellos una vez creado el objeto. * private: los atributos y metodos no pueden ser llamados o modificados desde el objeto. * protected: los atributos y metodos solo pueden ser llamados o modificados desde la clase. Get y Set ********* Cuando manejamos atributos y métodos privados lo que utilizamos para ver o modificar estos es una convención llamada getter y setter la cual se basa en la creación de metodos públicos que sirven solo para esos fines. .. code:: php nombre = $nombre; $this->edad = $edad; } function saludar(){ echo "Te llamas " . $this->nombre . " y tienes " . $this->edad . " años."; } // para acceder a los métodos ahora usamos get: function get_nombre(){ return $this->nombre; } function get_edad(){ return $this->edad; } // para modificar los atributos usamos set: function set_nombre($nombre){ $this->nombre = $nombre; echo "Se ha cambiado el nombre por " . $this->nombre . "\n"; } function set_edad($edad){ $this->edad = $edad; echo "Se ha cambiado la edad por " . $this->edad . "\n"; } // a este método no se puede acceder desde el objeto: private function ver_clave(){ echo "La clave es: " . $this->clave; } // para ello usaremos un get: function get_clave(){ $this->ver_clave(); } } $persona = new Persona("Agustín", 32); // Ver los atributos: echo $persona->get_nombre(); echo "\n"; echo $persona->get_edad(); echo "\n"; // modificar los atributos: $persona->set_nombre("Paquito"); $persona->set_edad(47); // para ejecutar un metodo privado usamos un get: $persona->get_clave(); ?> .. important:: tanto Get como Set son convenciones para definir estos métodos de acceso a atributos y metodos privados pero en realidad son metodos normales. Herencia ******** La herencia en PHP es similar a lenguajes como Java o C#: .. code:: php especie = $especie; $this->edad = $edad; } function info(){ echo "Nuestro animal es un " . $this->especie . " y tiene " . $this->edad . " años \n"; } } // ahora creamos una clase hijo: class Humano extends Animal{ // el hijo tiene sus atributos y metodos: public $nombre; function __construct($nombre, $edad){ $this->nombre = $nombre; // pero también tenemos los metodos y atributos del padre: $this->especie = "Humano"; $this->edad = $edad; } function saludo(){ echo "Me llamo " . $this->nombre . " y tengo " . $this->edad . " años.\n"; } } // con el padre tenemos una serie de atributos y métodos: $animal = new Animal("León", 7); $animal->info(); // que con el hijo podemos utilizar: $humano = new Humano("Paco", 27); // podemos usar sus propios metodos: $humano->saludo(); // y podemos llamar a metodos del padre en el hijo: $humano->info(); ?> .. important:: En la herencia de clases existe otro concepto llamado polimorfismo y se basa en reutilizar los metodos de las clases padre para modificarlos en las clases hijo de forma que podemos reutilizarlos sin necesidad de crear unos nuevos. Atributos y Métodos estáticos ***************************** Los atributos y métodos estáticos en PHP son aquellos que se pueden acceder sin crear un objeto fuera de la clase con el uso de **::**. Estos métodos llevan un segundo modificador llamado ``static`` justo después de ``public``: .. code:: Manejor de archivos ################### En php podemos crear y modificar archivos con la función ``fopen()``: Cuando abrimos un archivo en php siempre asignamos un permiso: +---------------+--------------+ | Permiso | Nomenclatura | +===============+==============+ | Escritura | w - w+ | +---------------+--------------+ | Lectura | r - r+ | +---------------+--------------+ | Actualización | a - a+ | +---------------+--------------+ * En el caso de escritura: .. code:: php * En caso de lectura: .. code:: php "; print_r($datos); echo ""; } fclose($manejador); ?> * En caso de actualización: .. code:: php Conectar a bases de datos con PDO ################################# PDO (PHP Data Objects) sirve para conectarse a gran cantidad de bases de datos con el mismo código ya sea MySQL, SQL Server o PostgreSQL entre otras. * Conexión a base de datos MySQL: .. code:: php setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "Conexión realizada con éxito"; // para cerrar la conexión: $conn = null; ?> * Crear una base de datos: .. code:: php setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // preparamos la consulta: $sql = "CREATE DATABASE pruebaSQL"; // realizamos la consulta: $conn->exec($sql); echo "Base de datos creada con éxito"; $conn = null; ?> * Crear una tabla: .. code:: php setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "CREATE TABLE agenda( id INT(10) AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(30) NOT NULL, edad INT(10) NOT NULL )"; $conn->exec($sql); echo "Tabla creada con éxito"; $conn = null; ?> * Agregar registros a la tabla: .. code:: php setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "INSERT INTO agenda (nombre, edad) values ('Alfredo', 30)"; $conn->exec($sql); echo "Inserción realizada con éxito"; $conn = null; ?> * Hacer varias inserciones separando los parámetros: .. code:: php setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Preparar consulta para separar parametros: $sql = $conn->prepare("INSERT INTO agenda (nombre, edad) VALUES (:nombre, :edad)"); // preparar parametros: $sql->bindParam(':nombre', $nombre); $sql->bindParam(':edad', $edad); // insertar mas de un registro a la vez: $nombre = "Antonio"; $edad = 38; $sql->execute(); $nombre = "Eustaquia"; $edad = 73; $sql->execute(); echo "Inserciones realizadas correctamente"; $conn = null; ?> * Leer registros de la tabla: .. code:: php setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Preparar consulta y ejecutar directamente: $sql = $conn->query("SELECT * FROM agenda")->fetchAll(); // Recorrer todos los datos: foreach($sql as $data){ echo "- " . $data['nombre'] . "\n"; } $conn = null; ?> * Borrar registros de la tabla: .. code:: php setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Preparar consulta: $sql = "DELETE FROM agenda WHERE id=1"; // ejecutar consulta: $conn->exec($sql); echo "Registro eliminado"; $con = null; ?> * Actualizar registros de la tabla: .. code:: php setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Preparar consulta: $sql = "UPDATE agenda SET nombre='Elvira', edad=32 WHERE id=2"; // preparar estado: $stmt = $conn->prepare($sql); // ejecutar consulta: $stmt->execute(); echo "Registro actualizado"; $con = null; ?> PDO y SQLite 3 ************** Podríamos trabajar perfectamente SQLite 3 con PDO pero para ello antes tenemos que asegurarnos de dos cosas: * 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: .. code:: php setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); echo "Conexión realizada con éxito"; $con = null; ?> PHP CLI ####### Comandos útiles de PHP: * php -v: podemos ver la versión que usamos * php -m: podemos ver los moudlos cargados * php -i: podemos ver la configuración de php actual * php -r: enviar código a ejecutar ej: ``echo "hola mundo"`` * php archivo.php: podemos ejecutar un archivo php para ver en que ámbito se ha ejecutado. * php -S: ejecutar servidor php ``php -S localhost:8000`` * php -S -t: establecer un directorio inicial de arrance del server: ``php -S localhost:8000 -t inicial/``