{"id":18703,"date":"2025-09-10T17:48:11","date_gmt":"2025-09-10T23:48:11","guid":{"rendered":"http:\/\/imecaf.com\/blog\/?p=18703"},"modified":"2025-10-21T20:17:15","modified_gmt":"2025-10-22T02:17:15","slug":"php-y-bases-de-datos","status":"publish","type":"post","link":"https:\/\/imecaf.com\/blog\/2025\/09\/10\/php-y-bases-de-datos\/","title":{"rendered":"PHP y Bases de Datos: La dupla que hace posible las aplicaciones web din\u00e1micas"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Tiempo de lectura:<\/span> <span class=\"rt-time\"> 15<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"875\" height=\"525\" src=\"http:\/\/imecaf.com\/blog\/wp-content\/uploads\/PHP-y-base-de-datos.jpg\" alt=\"PHP y Bases de Datos\" class=\"wp-image-18704\" srcset=\"https:\/\/imecaf.com\/blog\/wp-content\/uploads\/PHP-y-base-de-datos.jpg 875w, https:\/\/imecaf.com\/blog\/wp-content\/uploads\/PHP-y-base-de-datos-300x180.jpg 300w, https:\/\/imecaf.com\/blog\/wp-content\/uploads\/PHP-y-base-de-datos-768x461.jpg 768w\" sizes=\"auto, (max-width: 875px) 100vw, 875px\" \/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\"><strong>Una introducci\u00f3n necesaria<\/strong><\/h2>\n\n\n\n<p>Si eres nuevo en PHP o Bases de Datos, empecemos con unas explicaciones sencillas. Imagina que entras a una tienda en l\u00ednea. Ves cientos de productos, filtras por precio, agregas art\u00edculos al carrito, inicias sesi\u00f3n con tu usuario y, al final, confirmas tu compra. Todo ocurre en segundos, y aunque parece simple, en el fondo hay una estructura bien organizada que guarda y recupera informaci\u00f3n: <strong>la base de datos.<\/strong><\/p>\n\n\n\n<p>Pero esa base de datos, por s\u00ed sola, no puede hablar directamente con tu navegador. Necesita un \u201cint\u00e9rprete\u201d, un lenguaje que tome los datos y los convierta en informaci\u00f3n \u00fatil que se muestre en pantalla. Ese papel lo cumple <strong>PHP<\/strong>.<\/p>\n\n\n\n<p>En este art\u00edculo vamos a explorar, paso a paso, c\u00f3mo funcionan las bases de datos, c\u00f3mo PHP se relaciona con ellas, y por qu\u00e9 herramientas como <strong>PDO<\/strong> son tan importantes para quienes quieren aprender a desarrollar aplicaciones web.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background\" style=\"background-color:#bd5600;color:#bd5600\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Qu\u00e9 es una base de datos (y por qu\u00e9 deber\u00edas entenderla antes de programar)<\/strong><\/h2>\n\n\n\n<p><a href=\"https:\/\/imecaf.com\/601\" target=\"_blank\" rel=\"noreferrer noopener\"><em>Una <\/em><strong><em>base de datos<\/em><\/strong><em> es un sistema<\/em><\/a> que permite <strong>almacenar, organizar y consultar informaci\u00f3n<\/strong>. Dicho de manera m\u00e1s sencilla, es como una gran libreta digital en la que puedes guardar datos de manera ordenada y acceder a ellos en cualquier momento.<\/p>\n\n\n\n<p>Ejemplo cotidiano:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>En tu tel\u00e9fono tienes una lista de contactos. Cada contacto tiene nombre, n\u00famero de tel\u00e9fono y, quiz\u00e1s, correo electr\u00f3nico.<\/li>\n\n\n\n<li>Esa lista es una <strong>tabla<\/strong> dentro de una base de datos.<\/li>\n\n\n\n<li>Cada contacto es un <strong>registro<\/strong> (una fila en esa tabla).<\/li>\n\n\n\n<li>Cada dato espec\u00edfico (nombre, tel\u00e9fono, correo) es un <strong>campo<\/strong> o columna.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"761\" height=\"525\" src=\"http:\/\/imecaf.com\/blog\/wp-content\/uploads\/que-es-una-base-de-datos.jpg\" alt=\"PHP y Bases de Datos: Qu\u00e9 es una BD\" class=\"wp-image-18705\" style=\"width:479px;height:auto\" srcset=\"https:\/\/imecaf.com\/blog\/wp-content\/uploads\/que-es-una-base-de-datos.jpg 761w, https:\/\/imecaf.com\/blog\/wp-content\/uploads\/que-es-una-base-de-datos-300x207.jpg 300w\" sizes=\"auto, (max-width: 761px) 100vw, 761px\" \/><\/figure>\n<\/div>\n\n\n<p>Una base de datos es esencial porque evita que la informaci\u00f3n se pierda o que tengamos que escribirla cada vez desde cero. En el contexto de una aplicaci\u00f3n web, sirve para recordar usuarios, pedidos, publicaciones, mensajes y pr\u00e1cticamente cualquier dato que quieras almacenar.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"\u00bfQu\u00e9 papel juegan las bases de datos en el desarrollo con PHP.mp4\" width=\"563\" height=\"1000\" src=\"https:\/\/www.youtube.com\/embed\/D34xtO-iuBk?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background\" style=\"background-color:#bd5600;color:#bd5600\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>MySQL: el aliado perfecto de PHP<\/strong><\/h2>\n\n\n\n<div class=\"wp-block-media-text\" style=\"grid-template-columns:35% auto\"><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"262\" height=\"138\" src=\"http:\/\/imecaf.com\/blog\/wp-content\/uploads\/MySql.png\" alt=\"PHP y Bases de Datos: MySQL\" class=\"wp-image-18706 size-full\"\/><\/figure><div class=\"wp-block-media-text__content\">\n<p>Entre los muchos gestores de bases de datos existentes, <a href=\"https:\/\/imecaf.com\/132\"><strong><em>MySQL<\/em><\/strong><\/a> se ha convertido en el m\u00e1s popular, especialmente entre principiantes y proyectos web. Sus ventajas principales son:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Es gratuito y de c\u00f3digo abierto.<\/li>\n\n\n\n<li>Funciona de maravilla en servidores web.<\/li>\n\n\n\n<li>Tiene una gran comunidad de usuarios y desarrolladores.<\/li>\n\n\n\n<li>Es r\u00e1pido y seguro para proyectos de distintos tama\u00f1os.<\/li>\n<\/ul>\n<\/div><\/div>\n\n\n\n<p>Con PHP, MySQL forma parte del famoso \u201cstack LAMP\u201d (Linux, Apache, MySQL y PHP), que durante a\u00f1os ha sido la base de miles de aplicaciones en internet.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background\" style=\"background-color:#bd5600;color:#bd5600\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>SQL: el lenguaje universal de las bases de datos<\/strong><\/h2>\n\n\n\n<div class=\"wp-block-media-text\" style=\"grid-template-columns:25% auto\"><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"263\" height=\"263\" src=\"http:\/\/imecaf.com\/blog\/wp-content\/uploads\/SQL.png\" alt=\"PHP y Bases de Datos: SQL\" class=\"wp-image-18707 size-full\" srcset=\"https:\/\/imecaf.com\/blog\/wp-content\/uploads\/SQL.png 263w, https:\/\/imecaf.com\/blog\/wp-content\/uploads\/SQL-150x150.png 150w, https:\/\/imecaf.com\/blog\/wp-content\/uploads\/SQL-120x120.png 120w\" sizes=\"auto, (max-width: 263px) 100vw, 263px\" \/><\/figure><div class=\"wp-block-media-text__content\">\n<p>Para hablar con una base de datos <a href=\"https:\/\/imecaf.com\/127\"><em>usamos un lenguaje llamado <\/em><strong><em>SQL<\/em><\/strong><\/a><strong> (Structured Query Language)<\/strong>.<\/p>\n\n\n\n<p>Con SQL podemos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Consultar de manera selectiva lo que necesitamos.<\/li>\n\n\n\n<li>Crear tablas.<\/li>\n\n\n\n<li>Insertar registros.<\/li>\n\n\n\n<li>Modificar informaci\u00f3n.<\/li>\n\n\n\n<li>Eliminar datos.<\/li>\n<\/ul>\n<\/div><\/div>\n\n\n\n<p>Ejemplo de consulta:<\/p>\n\n\n\n<p><em>SELECT nombre, precio FROM productos WHERE precio &lt; 500;<\/em><\/p>\n\n\n\n<p>Esta instrucci\u00f3n pide a la base de datos que nos muestre el nombre y el precio de todos los productos que cuesten menos de 500.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background\" style=\"background-color:#bd5600;color:#bd5600\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>C\u00f3mo entra PHP en todo esto<\/strong><\/h2>\n\n\n\n<div class=\"wp-block-media-text\" style=\"grid-template-columns:30% auto\"><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"263\" height=\"136\" src=\"http:\/\/imecaf.com\/blog\/wp-content\/uploads\/php.png\" alt=\"Logo PHP\" class=\"wp-image-18708 size-full\"\/><\/figure><div class=\"wp-block-media-text__content\">\n<p>Ya entendimos qu\u00e9 es una base de datos y c\u00f3mo funciona SQL. Pero, \u00bfqu\u00e9 papel juega PHP?<\/p>\n\n\n\n<p>PHP es el <strong>puente<\/strong> entre la aplicaci\u00f3n web y la base de datos. Cuando un usuario llena un formulario, hace clic en un bot\u00f3n o busca un producto, PHP recibe esa acci\u00f3n, la traduce en una consulta SQL, la env\u00eda a la base de datos y finalmente muestra el resultado al usuario en el navegador.<\/p>\n\n\n\n<p>Sin PHP, la base de datos estar\u00eda aislada y el usuario nunca ver\u00eda la informaci\u00f3n en la p\u00e1gina web. Con PHP, todo se integra en un flujo din\u00e1mico.<\/p>\n<\/div><\/div>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background\" style=\"background-color:#bd5600;color:#bd5600\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Formas de conectar PHP con una base de datos<\/strong><\/h2>\n\n\n\n<div class=\"wp-block-media-text\" style=\"grid-template-columns:25% auto\"><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"263\" height=\"263\" src=\"http:\/\/imecaf.com\/blog\/wp-content\/uploads\/conectar-php-a-bbdd.png\" alt=\"Logo PHP y Bases de Datos\" class=\"wp-image-18709 size-full\" srcset=\"https:\/\/imecaf.com\/blog\/wp-content\/uploads\/conectar-php-a-bbdd.png 263w, https:\/\/imecaf.com\/blog\/wp-content\/uploads\/conectar-php-a-bbdd-150x150.png 150w, https:\/\/imecaf.com\/blog\/wp-content\/uploads\/conectar-php-a-bbdd-120x120.png 120w\" sizes=\"auto, (max-width: 263px) 100vw, 263px\" \/><\/figure><div class=\"wp-block-media-text__content\">\n<p>PHP ofrece dos extensiones principales para conectarse con bases de datos, especialmente con MySQL:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>PDO (PHP Data Objects):<\/strong> m\u00e1s avanzada y flexible, permite trabajar con distintos motores de bases de datos (no solo MySQL).<\/li>\n\n\n\n<li><strong>MySQLi (MySQL Improved):<\/strong> dise\u00f1ada \u00fanicamente para trabajar con MySQL. Es sencilla y directa.<\/li>\n<\/ul>\n<\/div><\/div>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background\" style=\"background-color:#bd5600;color:#bd5600\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conexi\u00f3n con MySQLi<\/strong><\/h2>\n\n\n\n<p>MySQLi es como el camino corto para quienes solo trabajar\u00e1n con MySQL. Es simple de usar y suficiente para proyectos peque\u00f1os o medianos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Ejemplo de conexi\u00f3n con MySQLi explicado en detalle<\/strong><\/h3>\n\n\n\n<p>El c\u00f3digo:<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-9d53263fc557d4175cee3782f4170788\">&lt;?php<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-d6b5dcd78a571a74d3a722d70b1e51c1\">$servidor = \u00ablocalhost\u00bb;<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-db5b1d24a2c39debb79dc2117de39e13\">$usuario = \u00abroot\u00bb;<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-2eb4c8393681d0bf515ef1c3d720dedb\">$clave = \u00ab\u00bb;<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-c512d01eda92af74bbb81cc60eca7615\">$baseDatos = \u00abtienda\u00bb;<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-cfabf7701194c8d690c23375f7710d56\">$conn = new mysqli($servidor, $usuario, $clave, $baseDatos);<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-77d51ee0d3cf0cb8d983fddf9b8c3af2\">if ($conn-&gt;connect_error) {<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-6ae0cc8d40753a9be46f3051888c828c\">&nbsp;&nbsp;&nbsp;&nbsp;die(\u00abError en la conexi\u00f3n: \u00bb . $conn-&gt;connect_error);<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-038086dadcd2d87aaff144d9417d9951\">}<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-50df296c4222e26cdc39a4fc1cbb7449\">echo \u00abConexi\u00f3n exitosa\u00bb;<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-a752d94d81b7410a4a1c15ae9788c24d\">?&gt;<\/p>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background\" style=\"background-color:#bd5600;color:#bd5600\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Paso 1: Definir los par\u00e1metros de conexi\u00f3n<\/strong><\/h3>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-d6b5dcd78a571a74d3a722d70b1e51c1\">$servidor = \u00ablocalhost\u00bb;<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-db5b1d24a2c39debb79dc2117de39e13\">$usuario = \u00abroot\u00bb;<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-2eb4c8393681d0bf515ef1c3d720dedb\">$clave = \u00ab\u00bb;<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-c512d01eda92af74bbb81cc60eca7615\">$baseDatos = \u00abtienda\u00bb;<\/p>\n\n\n\n<p><strong>$servidor = \u00ablocalhost\u00bb;<\/strong><\/p>\n\n\n\n<p>&nbsp;Aqu\u00ed indicamos d\u00f3nde est\u00e1 la base de datos.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Si trabajas en tu computadora, el valor casi siempre ser\u00e1 \u00ablocalhost\u00bb.<\/li>\n\n\n\n<li>Si tu base de datos est\u00e1 en un servidor externo, aqu\u00ed colocar\u00edas la direcci\u00f3n IP o el nombre del servidor (ej. \u00ab192.168.1.20\u00bb o \u00abmidominio.com\u00bb).<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>$usuario = \u00abroot\u00bb;<\/strong><\/h4>\n\n\n\n<p>Es el nombre del usuario que se conecta a la base de datos.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Por defecto, en instalaciones locales de MySQL, el usuario administrador es \u00abroot\u00bb.<\/li>\n\n\n\n<li>En un servidor en producci\u00f3n, nunca se debe usar root; en su lugar, se crea un usuario espec\u00edfico con permisos limitados.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>$clave = \u00ab\u00bb;<\/strong><\/h4>\n\n\n\n<p>Es la contrase\u00f1a del usuario de la base de datos.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>En instalaciones locales suele estar vac\u00eda, pero en servidores reales <strong>siempre<\/strong> debe tener una contrase\u00f1a segura.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>$baseDatos = \u00abtienda\u00bb;<\/strong><\/h4>\n\n\n\n<p>Es el nombre de la base de datos a la que queremos conectarnos.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Antes de ejecutar este c\u00f3digo, esa base de datos debe existir en tu servidor MySQL.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background\" style=\"background-color:#bd5600;color:#bd5600\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Paso 2: Crear el objeto de conexi\u00f3n<\/strong><\/h3>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-cfabf7701194c8d690c23375f7710d56\">$conn = new mysqli($servidor, $usuario, $clave, $baseDatos);<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Aqu\u00ed estamos usando la clase <strong>mysqli<\/strong>.<\/li>\n\n\n\n<li>$conn ser\u00e1 un objeto que representa la conexi\u00f3n.<\/li>\n\n\n\n<li>Lo que hace PHP es intentar conectarse al servidor de base de datos con los datos que indicamos antes.<\/li>\n<\/ul>\n\n\n\n<p>Si los datos son correctos (servidor, usuario, clave y base de datos existen), la conexi\u00f3n se establece. Si no, se genera un error.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Paso 3: Verificar si hubo error<\/strong><\/h3>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-77d51ee0d3cf0cb8d983fddf9b8c3af2\">if ($conn-&gt;connect_error) {<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-6ae0cc8d40753a9be46f3051888c828c\">&nbsp;&nbsp;&nbsp;&nbsp;die(\u00abError en la conexi\u00f3n: \u00bb . $conn-&gt;connect_error);<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-038086dadcd2d87aaff144d9417d9951\">}<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>$conn-&gt;connect_error guarda el mensaje de error en caso de que la conexi\u00f3n falle.<\/li>\n\n\n\n<li>if pregunta: \u201c\u00bfhay error?\u201d.<\/li>\n\n\n\n<li>Si s\u00ed lo hay, usamos die() para detener la ejecuci\u00f3n del programa y mostrar el mensaje.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Ejemplo de error t\u00edpico:<\/strong><\/h4>\n\n\n\n<p>Error en la conexi\u00f3n: Access denied for user &#8216;root&#8217;@&#8217;localhost&#8217; (using password: YES)<\/p>\n\n\n\n<p>Esto ocurre cuando el usuario o la contrase\u00f1a son incorrectos.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background\" style=\"background-color:#bd5600;color:#bd5600\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Paso 4: Confirmar la conexi\u00f3n<\/strong><\/h3>\n\n\n\n<p>echo \u00abConexi\u00f3n exitosa\u00bb;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Si no hubo error, significa que ya estamos conectados a la base de datos y podemos empezar a enviar consultas SQL desde PHP.<br><\/li>\n\n\n\n<li>Esta l\u00ednea simplemente imprime un mensaje para confirmar que todo est\u00e1 funcionando.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background\" style=\"background-color:#bd5600;color:#bd5600\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Flujo resumido<\/strong><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Definimos la informaci\u00f3n de acceso (servidor, usuario, clave, base de datos).<\/li>\n\n\n\n<li>Creamos un objeto que intenta conectarse.<\/li>\n\n\n\n<li>Validamos si hubo error en el intento.<\/li>\n\n\n\n<li>Si todo sale bien, confirmamos que estamos listos para trabajar con consultas.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background\" style=\"background-color:#bd5600;color:#bd5600\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Ejemplo pr\u00e1ctico<\/strong><\/h2>\n\n\n\n<p>Supongamos que tienes una base de datos llamada <strong>tienda<\/strong>, que contiene una tabla llamada <strong>productos<\/strong>.<\/p>\n\n\n\n<p>Si ya est\u00e1s conectado con el c\u00f3digo anterior, podr\u00edas a\u00f1adir lo siguiente:<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-f5e76764166df21c2e77f136a9dd959c\">$sql = \u00abSELECT nombre, precio FROM productos\u00bb;<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-7ea7c9bdfa9645ea45c9bed31f1318d8\">$resultado = $conn-&gt;query($sql);<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-1c7a03ae5326ae436c21d099504ef3da\">if ($resultado-&gt;num_rows &gt; 0) {<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-c875db1a1bb56eaf0bdf2f7c58fd6ee3\">&nbsp;&nbsp;&nbsp;&nbsp;while($fila = $resultado-&gt;fetch_assoc()) {<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-994307d8ee6d9c4287b08a00769cb901\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo \u00abProducto: \u00bb . $fila[\u00abnombre\u00bb]. \u00bb &#8211; Precio: $\u00bb . $fila[\u00abprecio\u00bb]. \u00ab&lt;br&gt;\u00bb;<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-02baf064d399bd97d1e3e9b10cadfe8e\">&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-e560211061e3c5eaa08bbb9342892274\">} else {<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-7e713d1519ab47d97c0e1fe0808fc041\">&nbsp;&nbsp;&nbsp;&nbsp;echo \u00abNo hay productos registrados\u00bb;<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-038086dadcd2d87aaff144d9417d9951\">}<\/p>\n\n\n\n<p>Con esto, PHP env\u00eda una consulta SQL a MySQL, recibe los resultados y los muestra en la p\u00e1gina.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background\" style=\"background-color:#bd5600;color:#bd5600\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conexi\u00f3n con PDO<\/strong><\/h2>\n\n\n\n<p><strong>PDO<\/strong>, es una interfaz m\u00e1s moderna y profesional.<\/p>\n\n\n\n<p>Sus ventajas principales son:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Soporta m\u00faltiples tipos de bases de datos (MySQL, PostgreSQL, SQLite, Oracle, etc.).<\/li>\n\n\n\n<li>Facilita el uso de consultas preparadas, que aumentan la seguridad.<\/li>\n\n\n\n<li>Tiene un manejo de errores m\u00e1s elegante y controlado.<\/li>\n<\/ul>\n\n\n\n<p><strong>Ejemplo de conexi\u00f3n con PDO:<\/strong><\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-9d53263fc557d4175cee3782f4170788\">&lt;?php<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-fd3e090bc6253e07565bdc33ffeab67e\">$servidor = \u00abmysql:host=localhost;dbname=tienda\u00bb;<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-db5b1d24a2c39debb79dc2117de39e13\">$usuario = \u00abroot\u00bb;<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-2eb4c8393681d0bf515ef1c3d720dedb\">$clave = \u00ab\u00bb;<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-de6d564c0d6111f44dd39e88f0bddcbb\">try {<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-218dc467b9db7839616335cf00710f3d\">&nbsp;&nbsp;&nbsp;&nbsp;$conexion = new PDO($servidor, $usuario, $clave);<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-f454b329cd001a61b2ad7bdbd5fa7ad9\">&nbsp;&nbsp;&nbsp;&nbsp;$conexion-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-6c87b2058021c5352b7702f5c30e17f3\">&nbsp;&nbsp;&nbsp;&nbsp;echo \u00abConexi\u00f3n exitosa\u00bb;<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-57a6548847e7439ef778df8ce5b036eb\">} catch(PDOException $e) {<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-c5bf9f57916a72918ea2d66a43eb82fc\">&nbsp;&nbsp;&nbsp;&nbsp;echo \u00abError: \u00bb . $e-&gt;getMessage();<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-038086dadcd2d87aaff144d9417d9951\">}<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-a752d94d81b7410a4a1c15ae9788c24d\">?&gt;<\/p>\n\n\n\n<p>En este c\u00f3digo usamos un bloque <strong>try&#8230;catch:<\/strong> intentamos conectarnos, y si ocurre un error, mostramos un mensaje claro en lugar de que el sistema falle abruptamente.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background\" style=\"background-color:#bd5600;color:#bd5600\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Qu\u00e9 son las consultas preparadas y por qu\u00e9 importan<\/strong><\/h2>\n\n\n\n<p>Uno de los riesgos m\u00e1s comunes al trabajar con bases de datos es la <strong>inyecci\u00f3n SQL<\/strong>, un ataque en el que un usuario malintencionado introduce c\u00f3digo en un formulario para manipular la base.<\/p>\n\n\n\n<p>Cuando un usuario llena un formulario (por ejemplo, \u201cNombre\u201d y \u201cCorreo\u201d) y env\u00eda los datos, PHP recibe esa informaci\u00f3n. El problema es que, si insertamos los datos directamente en una consulta SQL, abrimos la puerta a ataques como la <strong>inyecci\u00f3n SQL<\/strong>.<\/p>\n\n\n\n<p>Una <strong>inyecci\u00f3n SQL<\/strong> ocurre cuando un usuario malintencionado, en lugar de escribir un nombre normal, escribe un fragmento de c\u00f3digo SQL con la intenci\u00f3n de manipular la base de datos.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Ejemplo peligroso:<\/strong><\/h4>\n\n\n\n<p>En el campo \u201cnombre\u201d escribe:<br><br>Juan&#8217;); DROP TABLE usuarios; &#8212;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Si el c\u00f3digo PHP no maneja bien este dato, la consulta podr\u00eda terminar borrando toda la tabla de usuarios.<\/li>\n<\/ul>\n\n\n\n<p>Para evitarlo, usamos <strong>consultas preparadas<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background\" style=\"background-color:#bd5600;color:#bd5600\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>El c\u00f3digo explicado<\/strong><\/h3>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-7ee12ce4fcf63a0659bd12252585a81b\">$stmt = $conexion-&gt;prepare(\u00abINSERT INTO usuarios (nombre, correo) VALUES (:nombre, :correo)\u00bb);<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>$stmt<\/strong> es simplemente <strong>una variable de PHP<\/strong>.<\/li>\n\n\n\n<li>Su nombre viene de <strong>\u201cstatement\u201d<\/strong>, que en ingl\u00e9s significa \u201cinstrucci\u00f3n\u201d o \u201csentencia\u201d.<br><\/li>\n\n\n\n<li>Esta variable <strong>guarda el objeto de la consulta preparada<\/strong>.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>$conexion-&gt;prepare(&#8230;)<\/strong><br>Le decimos a la base de datos: \u201caqu\u00ed tienes la estructura de la consulta, pero todav\u00eda no te paso los valores reales\u201d.<br><\/li>\n\n\n\n<li>Los s\u00edmbolos<strong> :nombre<\/strong> y<strong> :correo<\/strong> son <strong>marcadores de posici\u00f3n<\/strong> (placeholders). Son espacios reservados para los datos que vendr\u00e1n despu\u00e9s.<br><\/li>\n\n\n\n<li>Esto significa que la base de datos ya \u201csabe\u201d qu\u00e9 consulta ejecutar, pero todav\u00eda no sabe con qu\u00e9 valores.<\/li>\n<\/ul>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-73f00ccf84cb12b44a977e5c71af37d8\">$stmt-&gt;bindParam(&#8216;:nombre&#8217;, $nombre);<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-ee1405612921588c34fcd09efb137ae5\">$stmt-&gt;bindParam(&#8216;:correo&#8217;, $correo);<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Aqu\u00ed estamos <strong>asociando<\/strong> cada marcador de posici\u00f3n con una variable de PHP.<br><\/li>\n\n\n\n<li>:nombre ser\u00e1 reemplazado por lo que contenga la variable <strong>$nombre<\/strong>.<br><\/li>\n\n\n\n<li>:correo ser\u00e1 reemplazado por lo que contenga la variable <strong>$correo<\/strong>.<\/li>\n<\/ul>\n\n\n\n<p>El detalle importante: al usar <strong>bindParam<\/strong>, los valores se \u201cescapan\u201d autom\u00e1ticamente. Esto significa que si alguien intenta inyectar c\u00f3digo SQL, el sistema lo tratar\u00e1 como <strong>texto literal<\/strong> y no como instrucci\u00f3n SQL.<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-4bc622b97bd6d98a08d4a5176c622138\">$nombre = \u00abMar\u00eda\u00bb;<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-119bb7fb28c9ce321a77454b369e3a2f\">$correo = \u00abmaria@email.com\u00bb;<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-3de9cbbe45e3d0d357d4ed5d30034618\">$stmt-&gt;execute();<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ahora asignamos valores a las variables.<br><\/li>\n\n\n\n<li>Al ejecutar <strong>$stmt-&gt;execute()<\/strong>, PHP env\u00eda la consulta a la base de datos junto con los valores.<\/li>\n<\/ul>\n\n\n\n<p><strong>Resultado:<\/strong> se inserta un nuevo registro en la tabla usuarios, con nombre = \u201cMar\u00eda\u201d y correo = \u201cmaria@email.com\u201d.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background\" style=\"background-color:#bd5600;color:#bd5600\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Por qu\u00e9 es m\u00e1s seguro<\/strong><\/h3>\n\n\n\n<p>En una consulta insegura, el SQL completo podr\u00eda quedar as\u00ed:<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-fe44d5ffc28445a82d112f9d39c8b61a\">INSERT INTO usuarios (nombre, correo) VALUES (&#8216;Juan&#8217;); DROP TABLE usuarios; &#8211;&#8216;, &#8216;correo@x.com&#8217;)<\/p>\n\n\n\n<p>Esto ser\u00eda un desastre porque ejecutar\u00eda el DROP TABLE (borrar la tabla). En cambio, con consultas preparadas, el valor \u00abJuan&#8217;); DROP TABLE usuarios; &#8211;\u00bb se guarda <strong>como texto literal<\/strong> dentro de la columna nombre. El sistema nunca lo interpreta como c\u00f3digo SQL.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background\" style=\"background-color:#bd5600;color:#bd5600\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Ejemplo pr\u00e1ctico con formulario<\/strong><\/h3>\n\n\n\n<p>Imagina este formulario en HTML:<\/p>\n\n\n\n<p class=\"has-vivid-green-cyan-color has-text-color has-link-color wp-elements-b12cb220ef55d2671bfbe3c788a27e93\">&lt;form method=\u00bbPOST\u00bb action=\u00bbguardar.php\u00bb&gt;<\/p>\n\n\n\n<p class=\"has-vivid-green-cyan-color has-text-color has-link-color wp-elements-6629f1dd46a4d7e399a47402d950e21a\">&nbsp;&nbsp;&nbsp;&nbsp;Nombre: &lt;input type=\u00bbtext\u00bb name=\u00bbnombre\u00bb&gt;&lt;br&gt;<\/p>\n\n\n\n<p class=\"has-vivid-green-cyan-color has-text-color has-link-color wp-elements-633e08aaf1edda8454541e83fe41e275\">&nbsp;&nbsp;&nbsp;&nbsp;Correo: &lt;input type=\u00bbemail\u00bb name=\u00bbcorreo\u00bb&gt;&lt;br&gt;<\/p>\n\n\n\n<p class=\"has-vivid-green-cyan-color has-text-color has-link-color wp-elements-bdb9fd65f0b33ee8343708a8a38e1011\">&nbsp;&nbsp;&nbsp;&nbsp;&lt;input type=\u00bbsubmit\u00bb value=\u00bbGuardar\u00bb&gt;<\/p>\n\n\n\n<p class=\"has-vivid-green-cyan-color has-text-color has-link-color wp-elements-803a22b9c9ef2fb159e9627c56e42964\">&lt;\/form&gt;<\/p>\n\n\n\n<p>Y en <strong>guardar.php:<\/strong><\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-9d53263fc557d4175cee3782f4170788\">&lt;?php<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-aec255a37ca6845c57415755b7987cac\">$conexion = new PDO(\u00abmysql:host=localhost;dbname=tienda\u00bb, \u00abroot\u00bb, \u00ab\u00bb);<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-436a86c104ce3373a0f0aa1fb9aa786f\">\/\/ Preparar consulta<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-7ee12ce4fcf63a0659bd12252585a81b\">$stmt = $conexion-&gt;prepare(\u00abINSERT INTO usuarios (nombre, correo) VALUES (:nombre, :correo)\u00bb);<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-9c4be5f9bf9d87fe7d1dafa6e042ba67\">\/\/ Asignar variables<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-5bd05582da6ea7f83ca3675b8f7ae6e6\">$stmt-&gt;bindParam(&#8216;:nombre&#8217;, $_POST[&#8216;nombre&#8217;]);<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-a3b22e92902d0468fb6c422ca70e9081\">$stmt-&gt;bindParam(&#8216;:correo&#8217;, $_POST[&#8216;correo&#8217;]);<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-316d1d44f7a9398235332c5cc9e0e2f0\">\/\/ Ejecutar<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-3de9cbbe45e3d0d357d4ed5d30034618\">$stmt-&gt;execute();<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-d94f4b62fca8915a6096d6ea37d264d4\">echo \u00abUsuario registrado con \u00e9xito.\u00bb;<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-a752d94d81b7410a4a1c15ae9788c24d\">?&gt;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Si el usuario escribe \u201cMar\u00eda\u201d y \u201cmaria@email.com\u201d, se guardan en la base.<br><\/li>\n\n\n\n<li>Si alguien intenta escribir c\u00f3digo malicioso, simplemente se guarda como texto y no afecta la base de datos.<br><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background\" style=\"background-color:#bd5600;color:#bd5600\"\/>\n\n\n\n<p><strong>Resumen:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Consultas preparadas<\/strong> = separar la consulta de los datos.<\/li>\n\n\n\n<li><strong>Placeholders<\/strong> (:nombre, :correo) = espacios reservados para valores.<\/li>\n\n\n\n<li><strong>bindParam<\/strong> = asegura que los valores se pasen como texto y no como c\u00f3digo.<\/li>\n\n\n\n<li><strong>execute()<\/strong> = ejecuta la consulta de forma segura.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background\" style=\"background-color:#bd5600;color:#bd5600\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Ejemplo pr\u00e1ctico: sistema de registro de usuarios<\/strong><\/h2>\n\n\n\n<p>Imaginemos que queremos un formulario en el que las personas se registren con su nombre y correo electr\u00f3nico.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. <strong>Creamos la tabla en MySQL:<\/strong><\/h3>\n\n\n\n<p class=\"has-vivid-purple-color has-text-color has-link-color wp-elements-f8fac1ca5f800b93ff6faf4c51b9974a\">CREATE TABLE usuarios (<\/p>\n\n\n\n<p class=\"has-vivid-purple-color has-text-color has-link-color wp-elements-a9272ee343a265915cb4aad39df6cc1e\">&nbsp;&nbsp;&nbsp;&nbsp;id INT AUTO_INCREMENT PRIMARY KEY,<\/p>\n\n\n\n<p class=\"has-vivid-purple-color has-text-color has-link-color wp-elements-cbe7efbf58e6ce9ec9d18c7b1247e4f4\">&nbsp;&nbsp;&nbsp;&nbsp;nombre VARCHAR(50) NOT NULL,<\/p>\n\n\n\n<p class=\"has-vivid-purple-color has-text-color has-link-color wp-elements-7087a2ce12a299b483cf5021324429ae\">&nbsp;&nbsp;&nbsp;&nbsp;correo VARCHAR(100) NOT NULL<\/p>\n\n\n\n<p class=\"has-vivid-purple-color has-text-color has-link-color wp-elements-c9adb714355d1af158f2c1f0b444a40c\">);<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Explicaci\u00f3n l\u00ednea por l\u00ednea<\/strong><\/h4>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>CREATE TABLE usuarios (<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Esto le dice a MySQL: \u201cquiero crear una <strong>tabla nueva<\/strong> llamada usuarios\u201d.<\/li>\n\n\n\n<li>Una tabla es como una hoja de c\u00e1lculo: tiene <strong>filas<\/strong> (cada registro) y <strong>columnas<\/strong> (cada dato espec\u00edfico).<br><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>id INT AUTO_INCREMENT PRIMARY KEY,<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>id es el <strong>identificador \u00fanico<\/strong> de cada usuario.<\/li>\n\n\n\n<li>INT significa que ser\u00e1 un n\u00famero entero.<\/li>\n\n\n\n<li>AUTO_INCREMENT indica que MySQL asignar\u00e1 autom\u00e1ticamente un n\u00famero creciente cada vez que agregues un nuevo registro.<br>\n<ul class=\"wp-block-list\">\n<li>Por ejemplo: el primer usuario tendr\u00e1 id=1, el segundo id=2, y as\u00ed sucesivamente.<br><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>PRIMARY KEY significa que esta columna identifica de manera <strong>\u00fanica cada fila<\/strong>, y no puede repetirse ni quedar vac\u00eda.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>nombre VARCHAR(50) NOT NULL,<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>nombre ser\u00e1 un texto (cadena de caracteres).<\/li>\n\n\n\n<li>VARCHAR(50) indica que el texto puede tener <strong>m\u00e1ximo 50 caracteres<\/strong>.<\/li>\n\n\n\n<li>NOT NULL obliga a que siempre se escriba un valor en esta columna; no puede quedar vac\u00eda.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>correo VARCHAR(100) NOT NULL<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>correo tambi\u00e9n ser\u00e1 un texto, m\u00e1ximo 100 caracteres.<\/li>\n\n\n\n<li>NOT NULL nuevamente asegura que el usuario siempre tenga un correo registrado.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>);<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cierra la instrucci\u00f3n SQL.<\/li>\n<\/ul>\n\n\n\n<p><strong>Resumen:<\/strong> Esta tabla permitir\u00e1 guardar los datos b\u00e1sicos de los usuarios: un identificador \u00fanico, un nombre y un correo electr\u00f3nico, asegurando que siempre haya informaci\u00f3n v\u00e1lida.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. <strong>Creamos el formulario en HTML:<\/strong><\/h3>\n\n\n\n<p class=\"has-vivid-green-cyan-color has-text-color has-link-color wp-elements-b12cb220ef55d2671bfbe3c788a27e93\">&lt;form method=\u00bbPOST\u00bb action=\u00bbguardar.php\u00bb&gt;<\/p>\n\n\n\n<p class=\"has-vivid-green-cyan-color has-text-color has-link-color wp-elements-6629f1dd46a4d7e399a47402d950e21a\">&nbsp;&nbsp;&nbsp;&nbsp;Nombre: &lt;input type=\u00bbtext\u00bb name=\u00bbnombre\u00bb&gt;&lt;br&gt;<\/p>\n\n\n\n<p class=\"has-vivid-green-cyan-color has-text-color has-link-color wp-elements-633e08aaf1edda8454541e83fe41e275\">&nbsp;&nbsp;&nbsp;&nbsp;Correo: &lt;input type=\u00bbemail\u00bb name=\u00bbcorreo\u00bb&gt;&lt;br&gt;<\/p>\n\n\n\n<p class=\"has-vivid-green-cyan-color has-text-color has-link-color wp-elements-bdb9fd65f0b33ee8343708a8a38e1011\">&nbsp;&nbsp;&nbsp;&nbsp;&lt;input type=\u00bbsubmit\u00bb value=\u00bbGuardar\u00bb&gt;<\/p>\n\n\n\n<p class=\"has-vivid-green-cyan-color has-text-color has-link-color wp-elements-803a22b9c9ef2fb159e9627c56e42964\">&lt;\/form&gt;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Explicaci\u00f3n l\u00ednea por l\u00ednea<\/strong><\/h4>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>&lt;form method=\u00bbPOST\u00bb action=\u00bbguardar.php\u00bb&gt;<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Esto crea un <strong>formulario HTML<\/strong> donde los usuarios ingresan informaci\u00f3n.<\/li>\n\n\n\n<li>method=\u00bbPOST\u00bb indica que los datos se enviar\u00e1n de forma <strong>privada<\/strong>, no se ver\u00e1n en la URL del navegador.<\/li>\n\n\n\n<li>action=\u00bbguardar.php\u00bb indica que, al enviar el formulario, PHP procesar\u00e1 los datos en el archivo guardar.php.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Nombre: &lt;input type=\u00bbtext\u00bb name=\u00bbnombre\u00bb&gt;&lt;br&gt;<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>&lt;input type=\u00bbtext\u00bb&gt; crea un <strong>campo de texto<\/strong> donde el usuario puede escribir su nombre.<\/li>\n\n\n\n<li>name=\u00bbnombre\u00bb es el <strong>nombre de la variable<\/strong> que PHP recibir\u00e1 al enviar el formulario ($_POST[&#8216;nombre&#8217;]).<\/li>\n\n\n\n<li>&lt;br&gt; agrega un salto de l\u00ednea para que el siguiente campo quede debajo.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Correo: &lt;input type=\u00bbemail\u00bb name=\u00bbcorreo\u00bb&gt;&lt;br&gt;<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>&lt;input type=\u00bbemail\u00bb&gt; crea un campo que <strong>valida autom\u00e1ticamente<\/strong> que el usuario escriba un correo con formato correcto.<\/li>\n\n\n\n<li>name=\u00bbcorreo\u00bb ser\u00e1 la variable que PHP usar\u00e1 ($_POST[&#8216;correo&#8217;]).<\/li>\n\n\n\n<li>&lt;br&gt; nuevamente para separar visualmente los campos.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>&lt;input type=\u00bbsubmit\u00bb value=\u00bbGuardar\u00bb&gt;<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Este bot\u00f3n permite <strong>enviar el formulario<\/strong>.<\/li>\n\n\n\n<li>value=\u00bbGuardar\u00bb define el texto que aparece en el bot\u00f3n.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>&lt;\/form&gt;<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cierra el formulario.<br><\/li>\n\n\n\n<li>Guardamos los datos con PHP y PDO:<\/li>\n<\/ul>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-7ee12ce4fcf63a0659bd12252585a81b\">$stmt = $conexion-&gt;prepare(\u00abINSERT INTO usuarios (nombre, correo) VALUES (:nombre, :correo)\u00bb);<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-5bd05582da6ea7f83ca3675b8f7ae6e6\">$stmt-&gt;bindParam(&#8216;:nombre&#8217;, $_POST[&#8216;nombre&#8217;]);<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-a3b22e92902d0468fb6c422ca70e9081\">$stmt-&gt;bindParam(&#8216;:correo&#8217;, $_POST[&#8216;correo&#8217;]);<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-3de9cbbe45e3d0d357d4ed5d30034618\">$stmt-&gt;execute();<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. <strong>Mostramos los registros guardados:<\/strong><\/h3>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-1bf85969f0266779efa7d544a36f4b6c\">$sql = \u00abSELECT * FROM usuarios\u00bb;<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-67d5fb8a7b4de5c1f85e32d2a4e6ccb8\">foreach ($conexion-&gt;query($sql) as $fila) {<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-d850320f4a115364c8cfa6d82fc8546f\">&nbsp;&nbsp;&nbsp;&nbsp;echo $fila[&#8216;id&#8217;].\u00bb &#8211; \u00ab.$fila[&#8216;nombre&#8217;].\u00bb &#8211; \u00ab.$fila[&#8216;correo&#8217;].\u00bb&lt;br&gt;\u00bb;<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-038086dadcd2d87aaff144d9417d9951\">}<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Flujo completo de c\u00f3mo funciona esto juntos<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El usuario abre la p\u00e1gina con el formulario.<\/li>\n\n\n\n<li>Escribe su nombre y correo.<\/li>\n\n\n\n<li>Hace clic en \u201cGuardar\u201d.<\/li>\n\n\n\n<li>Los datos viajan mediante POST a guardar.php.<\/li>\n\n\n\n<li>PHP recibe los datos ($_POST[&#8216;nombre&#8217;] y $_POST[&#8216;correo&#8217;]).<\/li>\n\n\n\n<li>PHP los inserta en la <strong>tabla usuarios<\/strong> de MySQL usando PDO o MySQLi.<\/li>\n\n\n\n<li>Ahora la base de datos guarda un registro nuevo con un id \u00fanico, un nombre y un correo.<\/li>\n<\/ul>\n\n\n\n<p>Con este flujo b\u00e1sico ya tenemos un peque\u00f1o sistema funcional.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background\" style=\"background-color:#bd5600;color:#bd5600\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Consultas m\u00e1s avanzadas en PHP y SQL<\/strong><\/h2>\n\n\n\n<p>Hasta ahora hemos visto ejemplos sencillos, pero las bases de datos permiten mucho m\u00e1s.<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes has-small-font-size\"><table class=\"has-black-color has-text-color has-link-color\"><tbody><tr><td><strong>Operaci\u00f3n<\/strong><\/td><td><strong>Prop\u00f3sito<\/strong><\/td><td><strong>Sintaxis b\u00e1sica<\/strong><\/td><td><strong>Ejemplo pr\u00e1ctico<\/strong><\/td><td><strong>Explicaci\u00f3n<\/strong><\/td><\/tr><tr><td>Ordenar resultados<\/td><td>Mostrar los registros en orden ascendente o descendente<\/td><td>`ORDER BY columna ASC<\/td><td>DESC`<\/td><td>SELECT nombre, precio FROM productos ORDER BY precio DESC;<\/td><\/tr><tr><td>Buscar coincidencias<\/td><td>Encontrar registros que contengan un patr\u00f3n<\/td><td>WHERE columna LIKE &#8216;%valor%&#8217;<\/td><td>SELECT nombre, correo FROM usuarios WHERE correo LIKE &#8216;%gmail%&#8217;;<\/td><td>Devuelve todos los usuarios con correos que contengan \u201cgmail\u201d.<\/td><\/tr><tr><td>Unir tablas (JOIN)<\/td><td>Combinar informaci\u00f3n de dos o m\u00e1s tablas relacionadas<\/td><td>INNER JOIN tabla2 ON tabla1.columna = tabla2.columna<\/td><td>SELECT clientes.nombre, pedidos.fecha FROM clientes INNER JOIN pedidos ON clientes.id = pedidos.id_cliente;<\/td><td>Muestra qu\u00e9 cliente realiz\u00f3 qu\u00e9 pedido.<\/td><\/tr><tr><td>Filtrar con varias condiciones<\/td><td>Seleccionar registros seg\u00fan m\u00faltiples criterios<\/td><td>WHERE columna1 = valor1 AND columna2 &lt; valor2<\/td><td>SELECT nombre, precio FROM productos WHERE categoria = &#8216;Electr\u00f3nica&#8217; AND precio &lt; 500;<\/td><td>Muestra productos electr\u00f3nicos con precio menor a 500.<\/td><\/tr><tr><td>Limitar resultados<\/td><td>Mostrar solo cierta cantidad de registros<\/td><td>LIMIT n\u00famero<\/td><td>SELECT nombre, precio FROM productos ORDER BY precio DESC LIMIT 5;<\/td><td>Devuelve los 5 productos m\u00e1s caros.<\/td><\/tr><tr><td>Contar registros<\/td><td>Saber cu\u00e1ntos registros cumplen cierta condici\u00f3n<\/td><td>SELECT COUNT(*) FROM tabla WHERE condici\u00f3n<\/td><td>SELECT COUNT(*) AS total_usuarios FROM usuarios WHERE correo LIKE &#8216;%@gmail.com&#8217;;<\/td><td>Cuenta cu\u00e1ntos usuarios tienen correo de Gmail.<\/td><\/tr><tr><td>Agrupar resultados<\/td><td>Agrupar registros con valores iguales y aplicar funciones agregadas<\/td><td>GROUP BY columna<\/td><td>SELECT id_cliente, COUNT(*) AS total_pedidos FROM pedidos GROUP BY id_cliente;<\/td><td>Muestra cu\u00e1ntos pedidos tiene cada cliente.<\/td><\/tr><tr><td>Buscar rangos<\/td><td>Seleccionar registros dentro de un rango de valores<\/td><td>WHERE columna BETWEEN valor1 AND valor2<\/td><td>SELECT nombre, precio FROM productos WHERE precio BETWEEN 100 AND 500;<\/td><td>Devuelve productos con precio entre 100 y 500.<\/td><\/tr><tr><td>Filtrar valores nulos<\/td><td>Encontrar registros vac\u00edos o con informaci\u00f3n<\/td><td>WHERE columna IS NULL o IS NOT NULL<\/td><td>SELECT nombre FROM usuarios WHERE correo IS NULL;<\/td><td>Encuentra usuarios sin correo registrado.<\/td><\/tr><tr><td>Combinar varios filtros<\/td><td>Seleccionar registros que coincidan con varios valores<\/td><td>WHERE columna IN (valor1, valor2, &#8230;)<\/td><td>SELECT nombre, categoria FROM productos WHERE categoria IN (&#8216;Laptop&#8217;,&#8217;Tablet&#8217;);<\/td><td>Devuelve productos que sean Laptop o Tablet.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background\" style=\"background-color:#bd5600;color:#bd5600\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Transacciones: seguridad en procesos cr\u00edticos<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u00bfQu\u00e9 es una transacci\u00f3n?<\/strong><\/h3>\n\n\n\n<p>Una <strong>transacci\u00f3n<\/strong> es un conjunto de operaciones de base de datos que se ejecutan como <strong>una sola unidad<\/strong>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Si <strong>todas las operaciones<\/strong> se completan correctamente \u2192 la transacci\u00f3n se confirma (commit).<\/li>\n\n\n\n<li>Si <strong>alguna falla<\/strong> \u2192 todas las operaciones se deshacen (rollBack).<\/li>\n<\/ul>\n\n\n\n<p>Esto evita que la base de datos quede en un estado <strong>inconsistente<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Ejemplo cotidiano<\/strong><\/h3>\n\n\n\n<p>Imagina una <strong>transferencia bancaria<\/strong>:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Restamos $100 de la cuenta de Juan.<\/li>\n\n\n\n<li>Sumamos $100 a la cuenta de Ana.<\/li>\n<\/ol>\n\n\n\n<p>Si la primera operaci\u00f3n se ejecuta, pero la segunda falla, sin transacciones, el dinero desaparecer\u00eda:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Juan pierde $100<\/li>\n\n\n\n<li>Ana no recibe nada<\/li>\n<\/ul>\n\n\n\n<p>Con transacciones, si algo falla en cualquiera de los pasos, <strong>la operaci\u00f3n completa se cancela<\/strong>, y el dinero de Juan se mantiene intacto.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"761\" height=\"525\" src=\"http:\/\/imecaf.com\/blog\/wp-content\/uploads\/Transaccion.jpg\" alt=\"PHP y Bases de Datos: Transacciones\" class=\"wp-image-18712\" style=\"width:484px;height:auto\" srcset=\"https:\/\/imecaf.com\/blog\/wp-content\/uploads\/Transaccion.jpg 761w, https:\/\/imecaf.com\/blog\/wp-content\/uploads\/Transaccion-300x207.jpg 300w\" sizes=\"auto, (max-width: 761px) 100vw, 761px\" \/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\"><strong>C\u00f3digo PDO explicado paso a paso<\/strong><\/h2>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-de6d564c0d6111f44dd39e88f0bddcbb\">try {<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-0ca9a49f1953d488a098ee9ec2be65b4\">&nbsp;&nbsp;&nbsp;&nbsp;$conexion-&gt;beginTransaction();<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-86e3a441324738c0ee0a9db0e1f91728\">&nbsp;&nbsp;&nbsp;&nbsp;$conexion-&gt;exec(\u00abUPDATE cuentas SET saldo = saldo &#8211; 100 WHERE id=1\u00bb);<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-c67bdd8e8b5a8673c425b58906f81ece\">&nbsp;&nbsp;&nbsp;&nbsp;$conexion-&gt;exec(\u00abUPDATE cuentas SET saldo = saldo + 100 WHERE id=2\u00bb);<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-fd976f538ad860b755a428ca298ce414\">&nbsp;&nbsp;&nbsp;&nbsp;$conexion-&gt;commit();<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-02c8e9681d44c5fcf80e61fcd8271a34\">} catch (Exception $e) {<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-63bfd55d5b461e1eec74d6181a9fddbb\">&nbsp;&nbsp;&nbsp;&nbsp;$conexion-&gt;rollBack();<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-c5bf9f57916a72918ea2d66a43eb82fc\">&nbsp;&nbsp;&nbsp;&nbsp;echo \u00abError: \u00bb . $e-&gt;getMessage();<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-038086dadcd2d87aaff144d9417d9951\">}<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>L\u00ednea por l\u00ednea<\/strong><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>try { &#8230; } catch (Exception $e) { &#8230; }<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Bloque <strong>try\/catch<\/strong>: PHP intenta ejecutar el c\u00f3digo dentro de try.<\/li>\n\n\n\n<li>Si ocurre alg\u00fan error, se ejecuta lo que est\u00e1 dentro de catch, evitando que el sistema falle abruptamente.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>$conexion-&gt;beginTransaction();<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Inicia la transacci\u00f3n.<\/li>\n\n\n\n<li>Todas las operaciones siguientes <strong>forman parte de esta transacci\u00f3n<\/strong> hasta que se confirme o deshaga.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>$conexion-&gt;exec(\u00abUPDATE cuentas SET saldo = saldo &#8211; 100 WHERE id=1\u00bb);<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Actualiza la cuenta de Juan, restando $100.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>$conexion-&gt;exec(\u00abUPDATE cuentas SET saldo = saldo + 100 WHERE id=2\u00bb);<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Actualiza la cuenta de Ana, sumando $100.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>$conexion-&gt;commit();<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Confirma la transacci\u00f3n.<\/li>\n\n\n\n<li>Todas las operaciones dentro de la transacci\u00f3n se aplican definitivamente en la base de datos.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>catch (Exception $e) { &#8230; }<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Si ocurre un error en cualquiera de las operaciones dentro del try, PHP ejecuta:<\/li>\n<\/ul>\n\n\n\n<p>$conexion-&gt;rollBack();<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Esto <strong>revierte todas las operaciones<\/strong> de la transacci\u00f3n, dejando la base de datos en el estado original antes de iniciarla.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>echo \u00abError: \u00bb . $e-&gt;getMessage();<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Muestra un mensaje claro sobre qu\u00e9 fall\u00f3, para poder solucionarlo.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Flujo visual de la transacci\u00f3n<\/strong><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>beginTransaction() \u2192 Inicio<\/li>\n\n\n\n<li>Restar dinero de Juan \u2192 Paso 1<\/li>\n\n\n\n<li>Sumar dinero a Ana \u2192 Paso 2<\/li>\n\n\n\n<li>commit() \u2192 Todo OK \u2192 Guardar cambios<\/li>\n\n\n\n<li><strong>Si falla en Paso 2<\/strong> \u2192 rollBack() \u2192 Todo se deshace<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background\" style=\"background-color:#bd5600;color:#bd5600\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Por qu\u00e9 es importante en PHP y bases de datos<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Seguridad de los datos:<\/strong> Evita que una operaci\u00f3n incompleta deje informaci\u00f3n incorrecta.<br><\/li>\n\n\n\n<li><strong>Consistencia:<\/strong> Garantiza que los registros relacionados se mantengan coherentes.<br><\/li>\n\n\n\n<li><strong>Control de errores:<\/strong> Permite manejar problemas de forma elegante sin afectar al usuario.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background\" style=\"background-color:#bd5600;color:#bd5600\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Buenas pr\u00e1cticas al trabajar con PHP y bases de datos<\/strong><\/h2>\n\n\n\n<div class=\"wp-block-media-text has-media-on-the-right\" style=\"grid-template-columns:auto 45%\"><div class=\"wp-block-media-text__content\">\n<ul class=\"wp-block-list\">\n<li><strong>Usa siempre consultas preparadas.<\/strong> Son tu mejor defensa contra la inyecci\u00f3n SQL.<br><\/li>\n\n\n\n<li><strong>Crea usuarios con permisos limitados.<\/strong> Nunca uses el usuario root en producci\u00f3n.<br><\/li>\n\n\n\n<li><strong>Valida y sanitiza los datos que recibes.<\/strong> No conf\u00edes ciegamente en lo que ingresa el usuario.<br><\/li>\n\n\n\n<li><strong>Organiza tu c\u00f3digo.<\/strong> Separa la l\u00f3gica de conexi\u00f3n, consultas y presentaci\u00f3n en distintos archivos.<br><\/li>\n\n\n\n<li><strong>Haz respaldos regulares.<\/strong> Nunca subestimes la importancia de una copia de seguridad.<br><\/li>\n\n\n\n<li><strong>Optimiza con \u00edndices.<\/strong> Si tu tabla crece mucho, los \u00edndices ayudan a buscar datos m\u00e1s r\u00e1pido.<\/li>\n<\/ul>\n<\/div><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"525\" height=\"744\" src=\"http:\/\/imecaf.com\/blog\/wp-content\/uploads\/buenas-practicas.png\" alt=\"Buenas pr\u00e1cticas\" class=\"wp-image-18715 size-full\" srcset=\"https:\/\/imecaf.com\/blog\/wp-content\/uploads\/buenas-practicas.png 525w, https:\/\/imecaf.com\/blog\/wp-content\/uploads\/buenas-practicas-212x300.png 212w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><\/figure><\/div>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background\" style=\"background-color:#bd5600;color:#bd5600\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Comparaci\u00f3n entre MySQLi y PDO<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table is-style-stripes has-small-font-size\"><table class=\"has-black-color has-text-color has-link-color\"><tbody><tr><td><strong>Caracter\u00edstica<\/strong><\/td><td><strong>MySQLi<\/strong><\/td><td><strong>PDO<\/strong><\/td><\/tr><tr><td>Compatibilidad<\/td><td>Solo con MySQL<\/td><td>Varios motores de bases de datos<\/td><\/tr><tr><td>Estilo de programaci\u00f3n<\/td><td>Procedural y orientado a objetos<\/td><td>Solo orientado a objetos<\/td><\/tr><tr><td>Consultas preparadas<\/td><td>S\u00ed<\/td><td>S\u00ed<\/td><\/tr><tr><td>Migraci\u00f3n a otro sistema<\/td><td>Dif\u00edcil<\/td><td>M\u00e1s sencilla<\/td><\/tr><tr><td>Manejo de errores<\/td><td>Limitado<\/td><td>Con excepciones y mayor control<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background\" style=\"background-color:#bd5600;color:#bd5600\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conclusi\u00f3n<\/strong><\/h2>\n\n\n\n<p>Las aplicaciones modernas no se entienden sin bases de datos. PHP, al actuar como puente entre el usuario y la informaci\u00f3n, hace posible que una p\u00e1gina web deje de ser est\u00e1tica para convertirse en una plataforma interactiva y \u00fatil.<\/p>\n\n\n\n<p>En este recorrido aprendimos:<\/p>\n\n\n\n<div class=\"wp-block-media-text\" style=\"grid-template-columns:40% auto\"><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"525\" height=\"744\" src=\"http:\/\/imecaf.com\/blog\/wp-content\/uploads\/Conclusion-36.png\" alt=\"Conclusi\u00f3n\" class=\"wp-image-18716 size-full\" srcset=\"https:\/\/imecaf.com\/blog\/wp-content\/uploads\/Conclusion-36.png 525w, https:\/\/imecaf.com\/blog\/wp-content\/uploads\/Conclusion-36-212x300.png 212w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><\/figure><div class=\"wp-block-media-text__content\">\n<ul class=\"wp-block-list\">\n<li>Qu\u00e9 es una base de datos y c\u00f3mo se organiza.<br><\/li>\n\n\n\n<li>Por qu\u00e9 MySQL es el gestor m\u00e1s popular en proyectos web.<br><\/li>\n\n\n\n<li>Qu\u00e9 papel juega PHP en la comunicaci\u00f3n con bases de datos.<br><\/li>\n\n\n\n<li>Las diferencias entre MySQLi y PDO, y por qu\u00e9 PDO es m\u00e1s flexible y seguro.<br><\/li>\n\n\n\n<li>C\u00f3mo realizar consultas b\u00e1sicas y avanzadas.<br><\/li>\n\n\n\n<li>Qu\u00e9 son las transacciones y c\u00f3mo aseguran la integridad de los datos.<br><\/li>\n\n\n\n<li>Las mejores pr\u00e1cticas para trabajar de forma segura y profesional.<\/li>\n<\/ul>\n<\/div><\/div>\n\n\n\n<p>Si quieres dar el siguiente paso y dominar todo esto con ejercicios guiados y proyectos reales, te invitamos a inscribirte en nuestro <a href=\"https:\/\/imecaf.com\/124\" target=\"_blank\" rel=\"noreferrer noopener\"><strong><em>Curso de PHP<\/em><\/strong><\/a>, dise\u00f1ado para que aprendas desde cero a crear aplicaciones web din\u00e1micas.<\/p>\n\n\n\n<p>Y no olvides leer tambi\u00e9n nuestro art\u00edculo anterior:<a href=\"http:\/\/imecaf.com\/blog\/2025\/05\/02\/frameworks-php\/\" target=\"_blank\" rel=\"noreferrer noopener\"> <strong><em>Frameworks PHP: Gu\u00eda comparativa y detallada de caracter\u00edsticas y ventajas<\/em><\/strong><\/a>, donde exploramos c\u00f3mo estas herramientas pueden potenciar a\u00fan m\u00e1s tus proyectos en PHP.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background\" style=\"background-color:#bd5600;color:#bd5600\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Preguntas frecuentes (FAQ) sobre PHP y Bases de Datos<\/strong><\/h2>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary><strong>1. \u00bfQu\u00e9 es una base de datos y por qu\u00e9 es importante para PHP?<\/strong><\/summary>\n<p>Una base de datos es un sistema para almacenar, organizar y consultar informaci\u00f3n de manera estructurada. En aplicaciones web, PHP se conecta a la base de datos para <strong>recuperar, insertar o actualizar datos<\/strong>, permitiendo que los sitios sean din\u00e1micos y respondan a las acciones de los usuarios.<\/p>\n<\/details>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary><strong>2. \u00bfCu\u00e1l es la diferencia entre MySQLi y PDO en PHP?<\/strong><\/summary>\n<ul class=\"wp-block-list\">\n<li><strong>MySQLi:<\/strong> funciona solo con MySQL, soporta programaci\u00f3n procedural y orientada a objetos, permite consultas preparadas.<br><\/li>\n\n\n\n<li><strong>PDO:<\/strong> m\u00e1s flexible, soporta distintos gestores de bases de datos, solo orientado a objetos, facilita el uso de consultas preparadas y manejo de errores con excepciones.<\/li>\n<\/ul>\n<\/details>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary><strong>3. \u00bfQu\u00e9 es PDO y para qu\u00e9 se utiliza?<\/strong><\/summary>\n<p>PDO (<strong>PHP Data Objects<\/strong>) es una interfaz en PHP que permite <strong>conectar y trabajar con distintas bases de datos<\/strong>. Se utiliza para ejecutar consultas, manejar transacciones, y trabajar de manera segura mediante <strong>consultas preparadas<\/strong> que previenen la inyecci\u00f3n SQL.<\/p>\n<\/details>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary><strong>4. \u00bfQu\u00e9 son las consultas preparadas y por qu\u00e9 debo usarlas?<\/strong><\/summary>\n<p>Las consultas preparadas separan la estructura de la consulta SQL de los datos que se env\u00edan. Esto evita que <strong>usuarios malintencionados inserten c\u00f3digo SQL<\/strong> dentro de formularios, protegiendo la base de datos y garantizando que los datos se interpreten como texto y no como instrucciones.<\/p>\n<\/details>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary><strong>5. \u00bfQu\u00e9 es un JOIN y cu\u00e1ndo deber\u00eda usarlo?<\/strong><\/summary>\n<p>Un JOIN se usa para <strong>combinar informaci\u00f3n de varias tablas<\/strong> en una sola consulta. Por ejemplo, si quieres saber qu\u00e9 cliente realiz\u00f3 qu\u00e9 pedido, se puede unir la tabla clientes con la tabla pedidos usando INNER JOIN, LEFT JOIN o RIGHT JOIN, dependiendo de los resultados que necesites mostrar.<\/p>\n<\/details>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary><strong>6. \u00bfQu\u00e9 son las transacciones en PHP y por qu\u00e9 son importantes?<\/strong><\/summary>\n<p>Las transacciones permiten ejecutar un conjunto de operaciones como <strong>una sola unidad<\/strong>. Si alguna falla, todas se revierten, manteniendo la <strong>integridad de los datos<\/strong>. Son especialmente importantes en operaciones cr\u00edticas, como transferencias bancarias o registros financieros.<\/p>\n<\/details>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary><strong>7. \u00bfQu\u00e9 buenas pr\u00e1cticas debo seguir al conectar PHP con bases de datos?<\/strong><\/summary>\n<ul class=\"wp-block-list\">\n<li>Usar <strong>consultas preparadas<\/strong> siempre.<br><\/li>\n\n\n\n<li>No usar el usuario root en producci\u00f3n; crear usuarios con permisos limitados.<br><\/li>\n\n\n\n<li>Validar y sanitizar los datos ingresados por el usuario.<br><\/li>\n\n\n\n<li>Separar la l\u00f3gica de conexi\u00f3n, consultas y presentaci\u00f3n en distintos archivos.<br><\/li>\n\n\n\n<li>Hacer <strong>respaldos peri\u00f3dicos<\/strong> y optimizar tablas con \u00edndices cuando crecen mucho.<\/li>\n<\/ul>\n<\/details>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary><strong>8. \u00bfC\u00f3mo se conectan PHP y MySQL de manera segura?<\/strong><\/summary>\n<p>La forma m\u00e1s segura es usando <strong>PDO con consultas preparadas<\/strong> y control de errores mediante try\/catch. Esto garantiza que los datos se env\u00eden de manera segura, los errores se manejen adecuadamente y se minimice el riesgo de inyecci\u00f3n SQL.<\/p>\n<\/details>\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/imecaf.com\/blog\/wp-content\/uploads\/PHP-y-Bases-de-Datos.pdf\"><img decoding=\"async\" style=\"width: 303px; height: auto;\" src=\"http:\/\/imecaf.com\/blog\/wp-content\/uploads\/Descargar-PDF-e1708732610860-1024x317.png\" alt=\"PHP y Bases de Datos PDF\"\/><\/a><\/figure>","protected":false},"excerpt":{"rendered":"<p>Una introducci\u00f3n necesaria Si eres nuevo en PHP o Bases de Datos, empecemos con unas explicaciones sencillas. Imagina que entras a una tienda en l\u00ednea. Ves cientos de productos, filtras por precio, agregas art\u00edculos al carrito, inicias sesi\u00f3n con tu usuario y, al final, confirmas tu compra. Todo ocurre en segundos, y aunque parece simple, &#8230; <a title=\"PHP y Bases de Datos: La dupla que hace posible las aplicaciones web din\u00e1micas\" class=\"read-more\" href=\"https:\/\/imecaf.com\/blog\/2025\/09\/10\/php-y-bases-de-datos\/\">Leer m\u00e1s <span class=\"screen-reader-text\">PHP y Bases de Datos: La dupla que hace posible las aplicaciones web din\u00e1micas<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":18704,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[288,7],"tags":[11026,11504,11820,3942,11816,8286,11819,11818,11817,11812,11813,11814,7804,11815,475,6985,11821,7471,7451],"class_list":["post-18703","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-articulos-computacion","category-computacion","tag-bases-de-datos","tag-buenas-practicas","tag-commit","tag-conexion","tag-consultas","tag-formulario","tag-html","tag-inyeccion-sql","tag-lenguaje-sql","tag-mysql","tag-mysqli","tag-pdo","tag-php","tag-php-data-objects","tag-programacion","tag-registro","tag-rollback","tag-tabla","tag-transaccion"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>PHP y Bases de Datos: Conoce lo Esencial para Empezar<\/title>\n<meta name=\"description\" content=\"Introducci\u00f3n pr\u00e1ctica a PHP y bases de datos: aprende c\u00f3mo se conectan, c\u00f3mo usar MySQL y PDO, y c\u00f3mo hacer consultas seguras paso a paso.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/imecaf.com\/blog\/2025\/09\/10\/php-y-bases-de-datos\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PHP y Bases de Datos: Conoce lo Esencial para Empezar\" \/>\n<meta property=\"og:description\" content=\"Introducci\u00f3n pr\u00e1ctica a PHP y bases de datos: aprende c\u00f3mo se conectan, c\u00f3mo usar MySQL y PDO, y c\u00f3mo hacer consultas seguras paso a paso.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/imecaf.com\/blog\/2025\/09\/10\/php-y-bases-de-datos\/\" \/>\n<meta property=\"og:site_name\" content=\"IMECAF - Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/IMECAF\" \/>\n<meta property=\"article:published_time\" content=\"2025-09-10T23:48:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-22T02:17:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/imecaf.com\/blog\/wp-content\/uploads\/PHP-y-base-de-datos.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"875\" \/>\n\t<meta property=\"og:image:height\" content=\"525\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Equipo de IMECAF\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"PHP y Bases de Datos: Conoce lo Esencial para Empezar\" \/>\n<meta name=\"twitter:description\" content=\"Introducci\u00f3n pr\u00e1ctica a PHP y bases de datos: aprende c\u00f3mo se conectan, c\u00f3mo usar MySQL y PDO, y c\u00f3mo hacer consultas seguras paso a paso.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/imecaf.com\/blog\/wp-content\/uploads\/PHP-y-base-de-datos.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@imecaf\" \/>\n<meta name=\"twitter:site\" content=\"@imecaf\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Equipo de IMECAF\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"20 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/2025\\\/09\\\/10\\\/php-y-bases-de-datos\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/2025\\\/09\\\/10\\\/php-y-bases-de-datos\\\/\"},\"author\":{\"name\":\"Equipo de IMECAF\",\"@id\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/#\\\/schema\\\/person\\\/a69b9f3972250aa0b1fdb798f094b4c7\"},\"headline\":\"PHP y Bases de Datos: La dupla que hace posible las aplicaciones web din\u00e1micas\",\"datePublished\":\"2025-09-10T23:48:11+00:00\",\"dateModified\":\"2025-10-22T02:17:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/2025\\\/09\\\/10\\\/php-y-bases-de-datos\\\/\"},\"wordCount\":4452,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/2025\\\/09\\\/10\\\/php-y-bases-de-datos\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/wp-content\\\/uploads\\\/PHP-y-base-de-datos.jpg\",\"keywords\":[\"bases de datos\",\"buenas practicas\",\"commit\",\"conexion\",\"Consultas\",\"formulario\",\"HTML\",\"Inyeccion SQL\",\"Lenguaje SQL\",\"MySQL\",\"MySQLi\",\"PDO\",\"php\",\"PHP Data Objects\",\"programacion\",\"registro\",\"rollback\",\"tabla\",\"transaccion\"],\"articleSection\":[\"Art\u00edculos\",\"Computaci\u00f3n\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/imecaf.com\\\/blog\\\/2025\\\/09\\\/10\\\/php-y-bases-de-datos\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/2025\\\/09\\\/10\\\/php-y-bases-de-datos\\\/\",\"url\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/2025\\\/09\\\/10\\\/php-y-bases-de-datos\\\/\",\"name\":\"PHP y Bases de Datos: Conoce lo Esencial para Empezar\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/2025\\\/09\\\/10\\\/php-y-bases-de-datos\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/2025\\\/09\\\/10\\\/php-y-bases-de-datos\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/wp-content\\\/uploads\\\/PHP-y-base-de-datos.jpg\",\"datePublished\":\"2025-09-10T23:48:11+00:00\",\"dateModified\":\"2025-10-22T02:17:15+00:00\",\"description\":\"Introducci\u00f3n pr\u00e1ctica a PHP y bases de datos: aprende c\u00f3mo se conectan, c\u00f3mo usar MySQL y PDO, y c\u00f3mo hacer consultas seguras paso a paso.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/2025\\\/09\\\/10\\\/php-y-bases-de-datos\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/imecaf.com\\\/blog\\\/2025\\\/09\\\/10\\\/php-y-bases-de-datos\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/2025\\\/09\\\/10\\\/php-y-bases-de-datos\\\/#primaryimage\",\"url\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/wp-content\\\/uploads\\\/PHP-y-base-de-datos.jpg\",\"contentUrl\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/wp-content\\\/uploads\\\/PHP-y-base-de-datos.jpg\",\"width\":875,\"height\":525},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/2025\\\/09\\\/10\\\/php-y-bases-de-datos\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PHP y Bases de Datos: La dupla que hace posible las aplicaciones web din\u00e1micas\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/\",\"name\":\"IMECAF\",\"description\":\"Un lugar para expresar y compartir inquietudes dentro del mundo de la educaci\u00f3n.\",\"publisher\":{\"@id\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/#organization\",\"name\":\"IMECAF - Instituto Mexicano de Contabilidad, Administraci\u00f3n y Finanzas\",\"url\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/wp-content\\\/uploads\\\/IMECAF.Logo_.25.png\",\"contentUrl\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/wp-content\\\/uploads\\\/IMECAF.Logo_.25.png\",\"width\":350,\"height\":350,\"caption\":\"IMECAF - Instituto Mexicano de Contabilidad, Administraci\u00f3n y Finanzas\"},\"image\":{\"@id\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/IMECAF\",\"https:\\\/\\\/x.com\\\/imecaf\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/imecaf\\\/\",\"https:\\\/\\\/www.youtube.com\\\/imecaf\",\"https:\\\/\\\/www.instagram.com\\\/imecaf_mx\\\/\",\"https:\\\/\\\/imecaf.negocio.site\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/#\\\/schema\\\/person\\\/a69b9f3972250aa0b1fdb798f094b4c7\",\"name\":\"Equipo de IMECAF\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4b4242953c12937bd47e298d7922b4d01ffafe2955ce4235d318b8950782aa13?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4b4242953c12937bd47e298d7922b4d01ffafe2955ce4235d318b8950782aa13?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4b4242953c12937bd47e298d7922b4d01ffafe2955ce4235d318b8950782aa13?s=96&d=mm&r=g\",\"caption\":\"Equipo de IMECAF\"},\"url\":\"https:\\\/\\\/imecaf.com\\\/blog\\\/author\\\/mfonticoba\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"PHP y Bases de Datos: Conoce lo Esencial para Empezar","description":"Introducci\u00f3n pr\u00e1ctica a PHP y bases de datos: aprende c\u00f3mo se conectan, c\u00f3mo usar MySQL y PDO, y c\u00f3mo hacer consultas seguras paso a paso.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/imecaf.com\/blog\/2025\/09\/10\/php-y-bases-de-datos\/","og_locale":"es_ES","og_type":"article","og_title":"PHP y Bases de Datos: Conoce lo Esencial para Empezar","og_description":"Introducci\u00f3n pr\u00e1ctica a PHP y bases de datos: aprende c\u00f3mo se conectan, c\u00f3mo usar MySQL y PDO, y c\u00f3mo hacer consultas seguras paso a paso.","og_url":"https:\/\/imecaf.com\/blog\/2025\/09\/10\/php-y-bases-de-datos\/","og_site_name":"IMECAF - Blog","article_publisher":"https:\/\/www.facebook.com\/IMECAF","article_published_time":"2025-09-10T23:48:11+00:00","article_modified_time":"2025-10-22T02:17:15+00:00","og_image":[{"width":875,"height":525,"url":"https:\/\/imecaf.com\/blog\/wp-content\/uploads\/PHP-y-base-de-datos.jpg","type":"image\/jpeg"}],"author":"Equipo de IMECAF","twitter_card":"summary_large_image","twitter_title":"PHP y Bases de Datos: Conoce lo Esencial para Empezar","twitter_description":"Introducci\u00f3n pr\u00e1ctica a PHP y bases de datos: aprende c\u00f3mo se conectan, c\u00f3mo usar MySQL y PDO, y c\u00f3mo hacer consultas seguras paso a paso.","twitter_image":"https:\/\/imecaf.com\/blog\/wp-content\/uploads\/PHP-y-base-de-datos.jpg","twitter_creator":"@imecaf","twitter_site":"@imecaf","twitter_misc":{"Escrito por":"Equipo de IMECAF","Tiempo de lectura":"20 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/imecaf.com\/blog\/2025\/09\/10\/php-y-bases-de-datos\/#article","isPartOf":{"@id":"https:\/\/imecaf.com\/blog\/2025\/09\/10\/php-y-bases-de-datos\/"},"author":{"name":"Equipo de IMECAF","@id":"https:\/\/imecaf.com\/blog\/#\/schema\/person\/a69b9f3972250aa0b1fdb798f094b4c7"},"headline":"PHP y Bases de Datos: La dupla que hace posible las aplicaciones web din\u00e1micas","datePublished":"2025-09-10T23:48:11+00:00","dateModified":"2025-10-22T02:17:15+00:00","mainEntityOfPage":{"@id":"https:\/\/imecaf.com\/blog\/2025\/09\/10\/php-y-bases-de-datos\/"},"wordCount":4452,"commentCount":0,"publisher":{"@id":"https:\/\/imecaf.com\/blog\/#organization"},"image":{"@id":"https:\/\/imecaf.com\/blog\/2025\/09\/10\/php-y-bases-de-datos\/#primaryimage"},"thumbnailUrl":"https:\/\/imecaf.com\/blog\/wp-content\/uploads\/PHP-y-base-de-datos.jpg","keywords":["bases de datos","buenas practicas","commit","conexion","Consultas","formulario","HTML","Inyeccion SQL","Lenguaje SQL","MySQL","MySQLi","PDO","php","PHP Data Objects","programacion","registro","rollback","tabla","transaccion"],"articleSection":["Art\u00edculos","Computaci\u00f3n"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/imecaf.com\/blog\/2025\/09\/10\/php-y-bases-de-datos\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/imecaf.com\/blog\/2025\/09\/10\/php-y-bases-de-datos\/","url":"https:\/\/imecaf.com\/blog\/2025\/09\/10\/php-y-bases-de-datos\/","name":"PHP y Bases de Datos: Conoce lo Esencial para Empezar","isPartOf":{"@id":"https:\/\/imecaf.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/imecaf.com\/blog\/2025\/09\/10\/php-y-bases-de-datos\/#primaryimage"},"image":{"@id":"https:\/\/imecaf.com\/blog\/2025\/09\/10\/php-y-bases-de-datos\/#primaryimage"},"thumbnailUrl":"https:\/\/imecaf.com\/blog\/wp-content\/uploads\/PHP-y-base-de-datos.jpg","datePublished":"2025-09-10T23:48:11+00:00","dateModified":"2025-10-22T02:17:15+00:00","description":"Introducci\u00f3n pr\u00e1ctica a PHP y bases de datos: aprende c\u00f3mo se conectan, c\u00f3mo usar MySQL y PDO, y c\u00f3mo hacer consultas seguras paso a paso.","breadcrumb":{"@id":"https:\/\/imecaf.com\/blog\/2025\/09\/10\/php-y-bases-de-datos\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/imecaf.com\/blog\/2025\/09\/10\/php-y-bases-de-datos\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/imecaf.com\/blog\/2025\/09\/10\/php-y-bases-de-datos\/#primaryimage","url":"https:\/\/imecaf.com\/blog\/wp-content\/uploads\/PHP-y-base-de-datos.jpg","contentUrl":"https:\/\/imecaf.com\/blog\/wp-content\/uploads\/PHP-y-base-de-datos.jpg","width":875,"height":525},{"@type":"BreadcrumbList","@id":"https:\/\/imecaf.com\/blog\/2025\/09\/10\/php-y-bases-de-datos\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/imecaf.com\/blog\/"},{"@type":"ListItem","position":2,"name":"PHP y Bases de Datos: La dupla que hace posible las aplicaciones web din\u00e1micas"}]},{"@type":"WebSite","@id":"https:\/\/imecaf.com\/blog\/#website","url":"https:\/\/imecaf.com\/blog\/","name":"IMECAF","description":"Un lugar para expresar y compartir inquietudes dentro del mundo de la educaci\u00f3n.","publisher":{"@id":"https:\/\/imecaf.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/imecaf.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/imecaf.com\/blog\/#organization","name":"IMECAF - Instituto Mexicano de Contabilidad, Administraci\u00f3n y Finanzas","url":"https:\/\/imecaf.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/imecaf.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/imecaf.com\/blog\/wp-content\/uploads\/IMECAF.Logo_.25.png","contentUrl":"https:\/\/imecaf.com\/blog\/wp-content\/uploads\/IMECAF.Logo_.25.png","width":350,"height":350,"caption":"IMECAF - Instituto Mexicano de Contabilidad, Administraci\u00f3n y Finanzas"},"image":{"@id":"https:\/\/imecaf.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/IMECAF","https:\/\/x.com\/imecaf","https:\/\/www.linkedin.com\/company\/imecaf\/","https:\/\/www.youtube.com\/imecaf","https:\/\/www.instagram.com\/imecaf_mx\/","https:\/\/imecaf.negocio.site\/"]},{"@type":"Person","@id":"https:\/\/imecaf.com\/blog\/#\/schema\/person\/a69b9f3972250aa0b1fdb798f094b4c7","name":"Equipo de IMECAF","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/4b4242953c12937bd47e298d7922b4d01ffafe2955ce4235d318b8950782aa13?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/4b4242953c12937bd47e298d7922b4d01ffafe2955ce4235d318b8950782aa13?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4b4242953c12937bd47e298d7922b4d01ffafe2955ce4235d318b8950782aa13?s=96&d=mm&r=g","caption":"Equipo de IMECAF"},"url":"https:\/\/imecaf.com\/blog\/author\/mfonticoba\/"}]}},"_links":{"self":[{"href":"https:\/\/imecaf.com\/blog\/wp-json\/wp\/v2\/posts\/18703","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/imecaf.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/imecaf.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/imecaf.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/imecaf.com\/blog\/wp-json\/wp\/v2\/comments?post=18703"}],"version-history":[{"count":11,"href":"https:\/\/imecaf.com\/blog\/wp-json\/wp\/v2\/posts\/18703\/revisions"}],"predecessor-version":[{"id":18931,"href":"https:\/\/imecaf.com\/blog\/wp-json\/wp\/v2\/posts\/18703\/revisions\/18931"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/imecaf.com\/blog\/wp-json\/wp\/v2\/media\/18704"}],"wp:attachment":[{"href":"https:\/\/imecaf.com\/blog\/wp-json\/wp\/v2\/media?parent=18703"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/imecaf.com\/blog\/wp-json\/wp\/v2\/categories?post=18703"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/imecaf.com\/blog\/wp-json\/wp\/v2\/tags?post=18703"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}