Publicado el Martes 21 de octubre de 2008 a las 16:08:37 por mauriciomoo
Lecturas
Es relativamente fácil utilizar la base de datos Postgres en PHP. Si anteriormente habías conectado PHP con MySQL, es practicamente lo mismo.
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.dll
3.- En ambiente Linux son varias líneas que se pueden descomentar y modificar; cada una de ellas tiene comentado su descripción, por ejemplo:
pgsql.allow_persistent = On pgsql.auto_reset_persistent = Off pgsql.max_persistent = -1 pgsql.max_links = -1 pgsql.ignore_notice = 0 pgsql.log_notice = 0
4- Todo esto con el fin de preparar la conexión. Es importante reiniciar el servidor Apache una vez guardados los campos.
5.- Para establecer una conexión PHP - Postgres, crearemos un archivo al que llamaremos conec.php e incluiremos las siguientes lineas:
/*Utilizamos una función para establecer la conexión*/ function Conectarse() { /*Mediante una condicion determinamos si se establecio o no la conexion. Usamoa la pg_connect donde colocamos los parámetros: dbname=Nombre de la Base de Datos port=Puerto de Conexion a la Base de Datos user=Nombre de Usuario para conectarse password=Password para conectarse*/ if (!($conexion = pg_connect("dbname=gyc port=5432 user=usuario password=password"))) { /*Si la conexion no es exitosa se mostrara el siguiente mensaje y salimos*/ echo "No pudo conectarse al servidor"; exit(); } /*No importa si se establecio o no la conexion, esta sera devuelta por la funcion*/ return $conexion; }
/*Ahora mandamos a llamar la funcion*/ Conectarse();
6.- Este archivo lo podemos guardar en alguna parte de nuestro proyecto y usar su ruta absoluta, pero en el caso de este ejemplo, lo colocaremos en la misma carpeta donde estara el archivo en donde usaremos la Base de Datos. Este archivo se llamara ejemplosql.php
7.- En ejemplosql.php incluiremos el siguiente código:
/*Incluimos el archivo de conexión*/ include("conec.php");
/*Guardamos en una variable el valor retornado de la función de conexión*/ $con=Conectarse();
/*Guardamos en una variable la sentencia SQL, en este caso del tipo SELECT*/ $sql_select_1 = "select nombre, edad from alumnos where id_alumno = '10'";
/*Realizamos la conexión y ejecutamos la consulta SQL mediante la función pg_Exec con los parámetros de conexión a la Base de Datos ($con) y la sentencia SQL ($sql_select_1)*/ $query_select_1 = pg_Exec($con, $sql_select_1);
/*Si todo salio bien, obtendremos un objeto con los datos obtenidos de la consulta SQL, mediante la funcion pg_fetch_object. Solo para los casos de SELECT*/ $query_result_1 = pg_fetch_object($query_equipos);
/*Una vez obtenido los datos, los podemos todavia extraer de forma mas particular, mediante los nombres de los campos y guardandolos en variables*/ $nombre = $query_result_1->nombre; $edad =$query_result_1->edad;
/*Imprimos las variables, comprobando el resultado.*/ echo "El nombre es: ".$nombre; echo "Y su edad es: $edad años";
8.- Hasta este punto, hemos logrado realizar una conexión PHP - Postgres. Si obtuvimos algun error, podremos buscarlo por medio del numero de línea, así mismo si el error esta en la sentencia SQL.
9.- La clase de sentencia SELECT que utilizamos es para obtener datos específicos en una sola fila. Si deseamos recuperar información en un resultado SELECT de mas de una línea:
/*Incluimos el archivo de conexión*/ include("conec.php");
/*Guardamos en una variable el valor retornado de la función de conexión*/ $con=Conectarse();
/*Guardamos en una variable la sentencia SQL, en este caso del tipo SELECT*/ $sql_select_2 = "select nombre, edad, grado from alumnos where edad < '18'";
/*Realizamos la conexión y ejecutamos la consulta SQL mediante la función pg_Exec con los parámetros de conexión a la Base de Datos ($con) y la sentencia SQL ($sql_select_2)*/ $query_select_2 = pg_Exec($con, $sql_select_2);
/*Obtenemos el número de filas del resultado con la función pg_num_rows*/ $no_filas = pg_num_rows($query_select_2);
/*Mediante un ciclo for, leemos cada una de las filas*/ for ($i=0;$i<$no_filas;$i++) {
/*Guardamos en un vector cada una de las filas durante el ciclo con la función pg_fetch_array con los parametros del objecto SQL y el numero de fila durante el ciclo*/ $array_local = pg_fetch_array($query_ausencias_local,$i);
/*Creado el vector, y durante el ciclo, podemos leer cada una de las filas mediante sus posiciones*/ echo "Su nombre es: $array_local[0], tiene $array_local[1] años y esta en el $array_local[2] grado"; }
10.- Para el caso de sentencias SQL como update, delete e insert, se utiliza como se muestra a continuacion:
$sql_update = "update alumnos set nombre = 'Mauricio', edad = '24', grado = '8'"; pg_Exec($con, $sql_update);
Saludos Jaime. Pueden ser varios detalles, por ejemplo cuando hacemos algun cambio en el php.ini, se debe de reiniciar el servidor apache para que tengan efecto los cambios. La otra puede ser algun error de sintáxis.
Ojala eso sea y puedas resolverlo.
Cualquier cosa aqui estamos, espero te sea de ayuda
Reinicie el servicio Apache, y también la computadora.
Bueno, al principio estaba trabajando con appserv, para php y mysql, tenía mis archivos en www del appserv y las bases de datos en data de mysql en el appserv.
los archivos son
index.php
que es en donde llamo el archivo conexion
________________
conexion.php (lo mostraré en mysql)
<?
$dbhost="localhost"; // host del MySQL (generalmente localhost)
$dbusuario="root"; // aqui debes ingresar el nombre de usuario
// para acceder a la base
$dbpassword="jaimejimbo"; // password de acceso para el usuario de la
// linea anterior
$db="bdlostoled"; // Seleccionamos la base con la cual trabajar
$conexion = mysql_connect($dbhost, $dbusuario, $dbpassword);
mysql_select_db($db, $conexion);
?>
Esto si me arroja los resultados, pero a la hora de hacer el cambio de mysql_connect por pg_conect me manda un error de que pg_conect no está definido. tengo creada mi tabla en postgres que es
(databases)
postgres
(schemas)
almacen
(tables)
equipo
los archivos aun los tengo en www, la verdad no sé dónde ponerlo, ami se me hace un poco mas fácil trabajar con mysql y php y apache, o con jsp y mysql y tomcat, pero no entiendo esto del postgres con apache...
Caray Diego, la otra duda que me queda es si incluso existe dentro de la carpeta de PHP el archivo php_pgsql.dll, no vaya ser que no exista o incluso este en otra ubicación diferente. Alguna vez me ocurrio eso.
Postgres es una base de datos muy interesante, incluso la comparan al mismo nivel que Oracle, sin embargo, no la hace mejor que mysql, solo depende el fin que busque utilizarla.
Postgres y Oracle se carecterizan por ser muy robustos y MySQL por su dinamismo, por eso es tan popular en sitios web.
Ojala sea de tu ayuda.
Saludos Jhonatan:
Por lo que pude entender en la pregunta, supondre que cuentas con una base de datos en sentencias de SQL en un archivo .txt o .sql y quieres pasarlo a PostgreSQL. Si es ese el caso, te invito a buscar herramientas para importar informacion a PostgreSQL. Una de ellas, que en realidad es un manejador, es el EMS SQL Manager 2005, el cual cuenta con dicha opción.
Espero sea de ayuda
EN REALIDAD ASI ES ESTOY HACIENDO UNA BASE DE DATOS EN SENTENCIAS DE SQL EN EL BLOC DE NOTAS Y LA GUARDO CON EXTENSION .SQL Y LA QUIERO JALAR DESDE POSTGRESQL.
QUE HASTA ESO HE TENIDO DIFICULTADES PARA INSTALARLO EN WINDOWS VISTA PREMIUM.
DADA TU EXPERIENCIA EN BASE DE DATOS CUAL SERIA LA MEJOR OPCION , YA QUE YO CONOSCO POCO DE BASE DE DATOS ESTOY INICIANDO EN ESTO Y PUES ME SERVIRIA DE MUCHO TU AYUDA.
YA QUE ESTOY MANEJANDO APROXIMADAMENTE 7000 REGISTROS Y ES PESADISIMO , ESTAR EN BLOC DE NOTAS. INSERTANDOLOS...
Caray Jhonatan, yo tengo el mismo problema con PostgreSQL para instalarlo en Windows Vista. Solo que no he intentado algo en lo cual tengo una duda. En la página de pgadminIII se encuentra el instalador de la base de datos de postgres en su ultima versión y hasta donde se compatible con Vista, y aunque ya lo he intentado y me ha fallado no he probado con la opción de "Ejecutar como Administrador" el instalador y ver de esa manera si funciona.
Definitivamente te sugiero el uso de un manejador de base de datos, por que insertar esa cantidad de registros con bloc de notas esta cañon, incluso hacerlo uno por uno tambien, por lo que si tal vez postgres no funcione en vista, seria utilizar algun otra base de datos como MySQL.
La solución debe de estar en seguir buscando como instalar postgres en vista, no creo que no tenga soporte. Veremos que encontramos.Saludos
PUES SI AUNQUE POSTGRESQL ES BUENA OPCION PERO ES UNA LATA CON LA INSTALACION Y MAS CON VISTA QUE TRABAJA SUPER DIFERENTE A LAS DEMAS. JAJAJA ESTOY CORTO EN TIEMPO Y PUES MMMMM QUE LATA....