Foros del Web » Programando para Internet » PHP »

pg_fetch_array

Estas en el tema de pg_fetch_array en el foro de PHP en Foros del Web. Hola nuevamente. Estoy recién aprendiendo a usar PostgreeSql. Antes usaba MySql y para extraer datos y listarlos ocupaba el mysql_fetch_array... traté de buscar un similar ...
  #1 (permalink)  
Antiguo 19/08/2011, 20:35
 
Fecha de Ingreso: agosto-2011
Mensajes: 100
Antigüedad: 13 años, 3 meses
Puntos: 1
Información pg_fetch_array

Hola nuevamente.

Estoy recién aprendiendo a usar PostgreeSql. Antes usaba MySql y para extraer datos y listarlos ocupaba el mysql_fetch_array... traté de buscar un similar para pg, y encontré el pg_fetch_array, pero se diferencian notablemente. Traté de entender algo en el manual de PHP, pero no caché ni una, más encima que no soy seco para el inglés... traté de entender con los ejemplos y quedé más perdido. ¿Me pueden explicar a grosso modo la función y un ejemplo breve de cómo usarla?

Código PHP:
Ver original
  1. pg_fetch_array($consulta,NULL, PGSQL_ASSOC)

Entiendo que el primer parámetro es la consulta que se le hace a la BD, algo caché de que el segundo es como el puntero señalado, y el tercero no caché nada... jaja.

Saludos.
  #2 (permalink)  
Antiguo 19/08/2011, 20:47
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: pg_fetch_array

No se si te sirva este ejemplo básico:

Código PHP:
Ver original
  1. //Nos conectamos con PostgreSQL
  2. $c = pg_connect("host=localhost dbname=personas user=postgres password=12345")
  3.     or die('No se ha podido conectar: ' . pg_last_error());
  4.  
  5. $sql = 'SELECT * FROM persona';
  6.  
  7. //Ejecutamos la consulta
  8. $res = pg_query($sql) or die('La consulta fallo: ' . pg_last_error());
  9.  
  10. //Recorremos el array asociativo con los datos
  11. while ($reg = pg_fetch_array($res, null, PGSQL_ASSOC)) {
  12.     echo $reg['id'] . ' ' . $reg['nombre'] . '<br />';
  13. }
  14.  
  15. //Liberamos la memoria (no creo que sea necesario con consultas tan simples)
  16.  
  17. //Cerramos la conexión

La única diferencia de pg_fetch_array es que tiene un parámetro más (row), pero si lo dejas NULL es casi igual a mysql_fetch_array

http://www.php.net/manual/es/functio...etch-array.php
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 20/08/2011 a las 00:07
  #3 (permalink)  
Antiguo 22/08/2011, 14:05
 
Fecha de Ingreso: agosto-2011
Mensajes: 100
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: pg_fetch_array

Cita:
Iniciado por andresdzphp Ver Mensaje
No se si te sirva este ejemplo básico:

Código PHP:
Ver original
  1. //Nos conectamos con PostgreSQL
  2. $c = pg_connect("host=localhost dbname=personas user=postgres password=12345")
  3.     or die('No se ha podido conectar: ' . pg_last_error());
  4.  
  5. $sql = 'SELECT * FROM persona';
  6.  
  7. //Ejecutamos la consulta
  8. $res = pg_query($sql) or die('La consulta fallo: ' . pg_last_error());
  9.  
  10. //Recorremos el array asociativo con los datos
  11. while ($reg = pg_fetch_array($res, null, PGSQL_ASSOC)) {
  12.     echo $reg['id'] . ' ' . $reg['nombre'] . '<br />';
  13. }
  14.  
  15. //Liberamos la memoria (no creo que sea necesario con consultas tan simples)
  16.  
  17. //Cerramos la conexión

La única diferencia de pg_fetch_array es que tiene un parámetro más (row), pero si lo dejas NULL es casi igual a mysql_fetch_array

[URL="http://www.php.net/manual/es/function.pg-fetch-array.php"]http://www.php.net/manual/es/function.pg-fetch-array.php[/URL]
Entendí bien el ejemplo... y lo ejecuté, pero por alguna razón solo me devuelve el primer caracter del primer campo. En la BD tengo como primer campo el ID y el pg_fetch_array tal cual como me dijiste me devuelve el n° 8, el ID del registro que estoy buscando... pero nada más.
  #4 (permalink)  
Antiguo 22/08/2011, 14:08
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: pg_fetch_array

Si puedes colocar el código a ver que es lo que estás haciendo, para que encontremos el error.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #5 (permalink)  
Antiguo 22/08/2011, 14:11
 
Fecha de Ingreso: agosto-2011
Mensajes: 100
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: pg_fetch_array

Código PHP:
Ver original
  1. $usu = $_POST["txt_usuario"];
  2.     $pass = $_POST["txt_contrasena"];
  3.     $consultar = pg_query($con,"select * from USUARIO where NOMBRE = '$usu' and CLAVE = '$pass'") or die('La consulta fallo: ' . pg_last_error());
  4.     while($rs = pg_fetch_array($consultar,0,PGSQL_BOTH)){
  5.     echo $rs[0];
  #6 (permalink)  
Antiguo 22/08/2011, 14:18
 
Fecha de Ingreso: agosto-2011
Mensajes: 100
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: pg_fetch_array

Ahí puse el código php.
  #7 (permalink)  
Antiguo 22/08/2011, 14:18
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: pg_fetch_array

Estás imprimiendo sólo el primer campo echo $rs[0];, que es lo que quieres imprimir? Usa el array asociativo con los campos que quieres usar:

$rs['id'] . ' ' . $rs['usuario'] . ' ' . $rs['password'];

porque con $rs[0]; sólo le estas diciendo que imprima el ID, no entiendo cual es tu problema.

while($rs = pg_fetch_array($consultar,0,PGSQL_BOTH)){

cambia ese cero por NULL
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 22/08/2011 a las 14:24
  #8 (permalink)  
Antiguo 22/08/2011, 14:29
 
Fecha de Ingreso: agosto-2011
Mensajes: 100
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: pg_fetch_array

Código PHP:
Ver original
  1. $usu = $_POST["txt_usuario"];
  2.     $pass = $_POST["txt_contrasena"];
  3.     $consultar = pg_query($con,"select * from Usuario where nombre = '$usu' and clave = '$pass'") or die('La consulta fallo: ' . pg_last_error());
  4.     while($rs = pg_fetch_array($consultar,NULL,PGSQL_BOTH)){
  5.     echo $rs["Nombre"];

Ahora probé con ese código y no me muestra nada de nada...
  #9 (permalink)  
Antiguo 22/08/2011, 14:31
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: pg_fetch_array

es Nombre o nombre ???
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #10 (permalink)  
Antiguo 22/08/2011, 14:32
 
Fecha de Ingreso: agosto-2011
Mensajes: 100
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: pg_fetch_array

He probado con los 2 para ver si es sensible a las mayúsculas, pero no muestra nada, aunque es Nombre.
  #11 (permalink)  
Antiguo 22/08/2011, 14:37
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: pg_fetch_array

Revisa que los datos por $_POST se estén pasando correctamente, que la consulta este bien hecha (pruebala en el administrador de postgres) y supongo que estas cerrando el while. Porque el ejemplo es muy claro y si sabes manejar mysql con mysql_fetch_array es exactamente igual con pg_fetch_array dejando como null el parámetro row.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #12 (permalink)  
Antiguo 22/08/2011, 14:57
 
Fecha de Ingreso: agosto-2011
Mensajes: 100
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: pg_fetch_array

Ya caché la pifia, aunque no tengo idea de por qué se causa.

Muestra los datos cuando hago referencia así:

Código PHP:
Ver original
  1. $consultar = pg_query($con,"select NOMBRE, TOKEN, TOKENSECRETO from USUARIO where NOMBRE = '$usu'");
  2. while($rs = pg_fetch_array($consultar)){
  3. echo "<br>".$rs[0].$rs[1].

Pero cuando hago referencia a los campos por su nombre, no por su índice, no muestra nada, o sea, así:

Código PHP:
Ver original
  1. $consultar = pg_query($con,"select NOMBRE, TOKEN, TOKENSECRETO from USUARIO where NOMBRE = '$usu'");
  2. while($rs = pg_fetch_array($consultar)){
  3. echo "<br>".$rs["NOMBRE"].$rs["TOKEN"].

No tengo idea de por qué, digo porque si fuera problema en que estoy escribiendo mal los campos no me mostraría nada en ninguno de los dos métodos, pero como la consulta SQL que está antes del WHILE funciona (debido a que muestra los datos por índicie) no cacho qué estoy haciendo mal.
  #13 (permalink)  
Antiguo 22/08/2011, 15:03
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: pg_fetch_array

Depura el array con lo siguiente:
Código PHP:
while($rs pg_fetch_array($consultar)){
var_dump($rs); 
¿Que muestra?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #14 (permalink)  
Antiguo 22/08/2011, 15:07
 
Fecha de Ingreso: agosto-2011
Mensajes: 100
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: pg_fetch_array

Esto me sale:

Código PHP:
Ver original
  1. array(6) { [0]=> string(6) "Algo" ["nombre"]=> string(6) "Algo" [1]=> string(16) "1234567890123456" ["token"]=> string(16) "1234567890123456" [2]=> string(16) "1234567890123456" ["tokensecreto"]=> string(16) "1234567890123456" }

Última edición por cvander; 23/08/2011 a las 22:45
  #15 (permalink)  
Antiguo 22/08/2011, 15:12
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: pg_fetch_array

Pues ahí tienes.

Es importante recordar que PHP es sensible a mayúsculas y minúsculas cuando se trata de variables, pues tu estabas leyéndolas en mayúsculas cuando claramente los índices están escritos con minúsculas.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #16 (permalink)  
Antiguo 22/08/2011, 15:14
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: pg_fetch_array

Más de lo que te decía ["nombre"]=> string(6) "Feligo" está totalmente en minúsculas y lo estas tratando de llamar en mayúsculas. $rs["NOMBRE"]
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #17 (permalink)  
Antiguo 22/08/2011, 15:16
 
Fecha de Ingreso: agosto-2011
Mensajes: 100
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: pg_fetch_array

Eso acabo de cachar probando... en minúsculas funciona perfecto... pero no sé por qué me tira problemas al asignarle los campos a las variables mientras que en la sentencia SQL no hay problemas (siendo que ahí nombro a los campos en mayúsculas).
  #18 (permalink)  
Antiguo 22/08/2011, 15:18
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: pg_fetch_array

Cita:
Iniciado por pateketrueke Ver Mensaje
Es importante recordar que PHP es sensible a mayúsculas y minúsculas cuando se trata de variables, pues tu estabas leyéndolas en mayúsculas cuando claramente los índices están escritos con minúsculas.
En postgres no es sensible a mayúsculas o minúsculas por eso te funciona la consulta, pero con PHP es muy distinto. Un array con indice Nombre no es igual a nombre. Como claramente te lo dijo @pateketrueke
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #19 (permalink)  
Antiguo 22/08/2011, 15:20
 
Fecha de Ingreso: agosto-2011
Mensajes: 100
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: pg_fetch_array

Cita:
Iniciado por andresdzphp Ver Mensaje
En postgres no es sensible a mayúsculas o minúsculas por eso te funciona la consulta, pero con PHP es muy distinto. Un array con indice Nombre no es igual a nombre. Como claramente de lo dijo @pateketrueke
Toda la razón estimado... de ahora en adelante ocuparé los nombres de campos como corresponde en SQL y PHP.

Gracias por la ayuda.

Etiquetas: mysql, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:05.