340 likes | 540 Views
Manejo de las bases de datos. Temas: • Conexión del servidor PostgreSQL • Creación y mantenimiento de bases de datos desde PHP • Manipulación de bases de datos y actualizaciones de registros • Listado de funciones de PHP para trabajar con PostgreSQL. Conexión del servidor.
E N D
Manejo de las bases de datos Temas: • Conexión del servidor PostgreSQL • Creación y mantenimiento de bases de datos desde PHP • Manipulación de bases de datos y actualizaciones de registros • Listado de funciones de PHP para trabajar con PostgreSQL
Conexión del servidor <?php//Ejercicio_1.php // Connecting, selecting database if (!$dbconn=pg_connect("host=localhost port=5432 user =postgres password=postgres dbname=ventasdb ")) { echo "Error Conectando al servidor de la Base de Datos: " . pg_last_error(); }else echo "Conexion Establecida"; //Cerrando Conexión pg_close($dbconn); ?>
Configuración del PHP.ini 1.- Modificamos el PHP.ini para agregar la extensión de pgsql. En ambiente Windows basta con teclear en menú ejecutar php.ini para abrirlo y modificarlo. En linux deberas de localizarlo en la carpeta de Apache.2.- Dentro de este archivo, en el caso de windows bastara con descomentar la siguiente línea:extension=php_pgsql.dll3- Todo esto con el fin de preparar la conexión. Es importante reiniciar el servidor Apache una vez guardados los campos.
Consultas a la Base de Datos <HTML> <HEAD> <TITLE>Pagina index de prueba</TITLE> </HEAD> <BODY> <?php //Ejercicio_2.php /* ********************* */ /* Conexion a PostgreSQL */ /* ********************* */ /* Conexion a la base de datos */ $conexion = pg_connect("host=localhost port=5432 user =postgres password=postgres dbname=ventasdb "); if (!$conexion) { echo "<CENTER> Problemas de conexion con la base de datos. </CENTER>"; exit; } //Continua
Consultas a la Base de Datos $sql="SELECT * FROM tbl_region ORDER BY id_region;"; /* Ejecuta y almacena el resultado de la orden SQL en $resultado_set */ $resultado_set = pg_Exec ($conexion, $sql); $filas = pg_NumRows($resultado_set); /* Presenta la informacion almacenada en $resultado_set */ for ($j=0; $j < $filas; $j++) { echo "Id: ".pg_result($resultado_set, $j, 0)." <BR> Región: ".pg_result($resultado_set, $j, 1)." <P>"; } /* Cierra la conexion con la base de datos */ pg_close($conexion); ?> </BODY> </HTML>
Consultas a la Base de Datos Cláusula INSERT INTO Ejercicio_3.php - Agregar una Región a la Tabla tbl_region
Consultas a la Base de Datos Cláusula INSERT INTO <?php $action=$_REQUEST['action']; if ( $action == "agregar" ) { $descripcion=$_POST['descripcion']; $sql="INSERT INTO tbl_region (id_region, descripcion) VALUES (NEXTVAL('sq_region_id'), '$descripcion')"; $conexion = pg_connect("host=localhost port=5432 user =postgres password=postgres dbname=ventasdb "); if (!$conexion) { echo "<CENTER> Problemas de conexion con la base de datos. </CENTER>"; exit; } //Continua
Consultas a la Base de Datos Cláusula INSERT INTO pg_query($conexion,$sql) or die("El proceso de actualización falló: " . pg_last_error() ); pg_close($conexion); echo " <SCRIPT language='JavaScript'> <!-- alert('¡Region agregada!'); document.location.href = 'ejercicio_3.php'; --> </script> "; } ?>
Consultas a la Base de Datos <form id="form1" name="form1" method="post" action="ejercicio_3.php"> <input type="hidden" name="action" value="agregar" /> <table width="303" border="1" align="center"> <tr> <td colspan="2"><div align="center"><strong>Regiones</strong></div></td> </tr> <tr> <td>Descripción:</td> <td><label> <input name="descripcion" type="text" id="descripcion" /> </label></td> </tr> <tr> <td colspan="2"><label> <input type="submit" name="Submit" value="Agregar" /> </label></td> </tr> </table> </form>
Consultas a la Base de Datos • Ejercicio_4.php • Listar el contenido de la tabla Región • Colocar un link a la misma página que contenga el código de la región • Eliminar la región seleccionada
Consultas a la Base de Datos if ( $action == "borrar" ) { $id=$_GET['id']; $sql="DELETE FROM tbl_region WHERE id_region=$id;"; $conexion = pg_connect("host=localhost port=5432 user =postgres password=postgres dbname=ventasdb "); if (!$conexion) { echo "<CENTER> Problemas de conexion con la base de datos. </CENTER>"; exit; } pg_query($conexion,$sql) or die("El proceso de actualización falló: " . pg_last_error() ); echo "<SCRIPT language='JavaScript'> <!-- alert('¡Registro borrado!'); document.location.href = 'ejercicio_4.php'; --> </script> "; } ?>
Consultas a la Base de Datos <?php echo '<h2 align="center">PHP y PostgreSQL</h2>'; echo '<h3 align="center">Lista de Regiones</h3>'; echo '<table align="center" border="1" width="50%">'; echo '<tr><td><b>Descripción</b></td><td> </td></tr>'; $sql="SELECT * FROM tbl_region"; //Query $conexion = pg_connect("host=localhost port=5432 user =postgres password=postgres dbname=ventasdb "); if (!$conexion) { echo "<CENTER> Problemas de conexion con la base de datos. </CENTER>"; exit; } $result=pg_query($conexion,$sql) or die("El proceso de actualización falló: " . pg_last_error() );
Consultas a la Base de Datos // Se hace un loop a través del result $filas = pg_numrows($result); for ($i=0; $i < $filas; $i++){ $estaFila = pg_fetch_row ($result,$i); $id = $estaFila[0]; $descripcion = $estaFila[1]; ?> <tr><td><?= $descripcion ?></td><td><a href="ejercicio_4.php?action=borrar&id=<?= $id ?>">Borrar</a></td></tr> <? } //Fin del loop pg_close($conexion); ?> </table> <br /><br />
Consultas a la Base de Datos • Ejercicio_5.php • Crear un combo haciendo uso de una función PHP
Consultas a la Base de Datos function crear_combo ($nombre_combo,$codigo_actual,$size_combo,$evento_java_script_form="",$operacion=1){ $conexion = pg_connect("host=localhost port=5432 user =postgres password=postgres dbname=ventasdb "); if (!$conexion) { echo "<CENTER> Problemas de conexion con la base de datos. </CENTER>"; exit; } $sql="SELECT * FROM tbl_region"; $result=pg_query($conexion,$sql) or die("El proceso de actualización falló: " . pg_last_error() );
Consultas a la Base de Datos // Se hace un loop a través del result $filas = pg_numrows($result); echo "<select name='". $nombre_combo . "' size='". $size_combo ."' " . "onChange=\"this.form.operacion.value='". $operacion . "';". $evento_java_script_form ."\">\n"; if ($filas > 0) { for ($i=0; $i < $filas; $i++){ $estaFila = pg_fetch_row ($result,$i); $codigo = $estaFila[0]; $descripcion = $estaFila[1]; if (strlen(trim($descripcion)) > 70) //Largo a mostrar en el combo $titulo=substr(trim($descripcion),0,70); else $titulo=trim($descripcion); if ($codigo_actual == trim($codigo)) echo "<option selected value=" . trim($codigo) . ">" . $titulo . "</option>\n"; else echo "<option value=" . trim($codigo) . ">" . $titulo . "</option>\n"; } //Fin del loop
Consultas a la Base de Datos }else { echo "<option selected value=-1>No hay Datos</option>\n"; } echo "</select>\n"; pg_close($conexion); } //Fin de la Función ?>
Consultas a la Base de Datos <body> <?php $codigo_actual = $_POST['cmb_region']; ?> <form id="form1" name="form1" method="post" action=""> <table width="200" border="1"> <tr> <td colspan="2">Regiones</td> </tr> <tr> <td>Región:</td> <td><?php crear_combo('cmb_region',$codigo_actual,1);?></td> </tr> </table> <input type="hidden" name="operacion" /> </form> </body> </html>
Consultas a la Base de Datos • Ejercicio_6.php • Trabajar con Combos anidados • EL primer combo debe seleccionar la región y el segundo las ciudades que guardan relación con la región seleccionada • Ver Archivo Ejercicio_6.php
Consultas a la Base de Datos • Ejercicio 7 • Crear un archivo de nombre librería.php • Crear funciones genericas de conexión a base de datos, colocarlas en el archivo librería.php • Hacer pruebas invocando a las funciones realizadas.
Consultas a la Base de Datos • Ejercicio 8 • Listar el contenido de la tabla tbl_productos, mostrando dos registros por pagina, es decir realice una paginación de registros.
Consultas a la Base de Datos • Ejercicio 9 • Realizar una página que incorpore las funciones básicas (Consultar, Agregar, Modificar, y Eliminar) sobre la tabla tbl_clientes
Consultas a la Base de Datos • Ejercicio 10 • Visualizar el contenido de la tabla clientes haciendo uso de las funciones php suministradas por el facilitador (visualizar_ext.php)
Consultas a la Base de Datos • Ejercicio 11 • Realizar una página que incorpore las funciones básicas (Consultar, Agregar, Modificar, y Eliminar) sobre la tabla tbl_productos. • En la medida de lo posible, hacer uso de los códigos suministrados, tales como, visualizar una tabla (visualizar_ext.php), Paginear una tabla, otros que considere.
Transacciones Las transacciones son un concepto fundamental de todos los sistemas de bases de datos. El punto esencial de una transacción es que empaqueta múltiples pasos dentro de una operación única, todo o nada. Los estados intermedios entre cada paso no son visibles a otras transacciones concurrentes,y si ocurre alguna falla que previene que la transacción se complete, en definitiva, ninguno de los pasos afectan a la base de datos.
Transacciones BEGIN: comienza una transacción en modo encadenado ROLLBACK Transacción es abortada Posibles cambios ignorados COMMIT: Realiza la transacción actual. Los datos son modificados físicamente en el Sistema de Almacenamiento LOCK: Explícitamente bloquea una tabla dentro de una transacción
Ejemplo manejo de Transacciones if (!(pg_Exec($link,"BEGIN WORK"))){echo("Error al iniciar transacción en la base de datos<br>");//exit(); si estamos en una funcion} $exito= pg_exec($conexion,$sql); if ($ exito){ pg_Exec($link,"COMMIT WORK");} else { pg_Exec($link,"ROLLBACK WORK"); echo "No se pudo realizar la inserción <br>"; }
Transacciones Ejercicio 12.- Modificar las funciones del ejercicio 9 para poder trabajar con transacciones.
Transacciones if (!(pg_exec($conexion,"BEGIN WORK"))){ echo("Error al iniciar transacción en la base de datos<br>"); exit(); }else{ echo "Inicio de Transacción <br>"; } $exito= pg_exec($conexion,$sql);// or die("El proceso de actualización falló: " . pg_last_error() ); if (!$exito){ pg_exec($conexion,"ROLLBACK WORK"); echo "No se pudo realizar la inserción <br>"; }else{ pg_exec($conexion,"COMMIT WORK"); echo " <SCRIPT language='JavaScript'> <!-- alert('¡Registro agregado!'); document.location.href = 'ejercicio_12.php'; --> </script> "; } pg_close($conexion);
Transacciones Ejercicio_13: - Hacer uso de la funciones Adodb conection
Conexión con ADODB <?php include('adodb5/adodb.inc.php'); $DB = NewADOConnection('postgres'); $server='localhost'; $user='postgres'; $pwd='postgres'; $db='ventasdb'; $DB->Connect($server, $user, $pwd, $db); # M'soft style data retrieval with binds $rs = $DB->Execute("select * from tbl_clientes where rut_cliente=3"); //$rs = $DB->Execute("select * from tbl_clientes where rut_cliente=?",array($key)); while (!$rs->EOF) { print_r($rs->fields); $rs->MoveNext(); }
Conexión con ADODB # PEAR style data retrieval $rs = $DB->Execute("select * from tbl_productos where id_productos=1"); while ($array = $rs->FetchRow()) { print_r($array); } # Alternative URI connection syntax: //$DB = NewADOConnection("mysql://$user:$pwd@$server/$db?persist"); # No need for Connect or PConnect when using URI syntax $ok = $DB->Execute("update tbl_productos set nombre = 'Lapiz Mongol'"); if (!$ok) mylogerr($DB->ErrorMsg()); ?>
Transacciones • Ejercicio_14: • Hacer uso de la funciones Adodb conection, e implementar una pagina php para realizar las funciones básicas sobre la tabla vendedores