¿Cómo realizar un Select con PDO en Postgresql / PHP?

publicado por: Anonymous

Actualmente estoy probando trabajar con PDO para evitar el SQL Injection pero sinceramente estoy sumamente verde, ya hice mi archivo de conexion a la base de datos por PDO pero no tengo bien claro como puedo hacer una consulta a traves de un select y el resultado mostrarlo en un echo.

Aquí tengo mi archivo de Conexión(pdoconnexpo.php):

_x000D_

_x000D_

<?php_x000D_
_x000D_
require_once 'pdodatosexpo.php';_x000D_
_x000D_
$dsn = "pgsql:host=$host;port=$port;dbname=$db;user=$username;password=$password";_x000D_
_x000D_
try{_x000D_
 // Crear la conexion a la base de datos postgresql_x000D_
 $conn2 = new PDO($dsn);_x000D_
_x000D_
 // Mostrar un mensaje si la conexion es efectiva_x000D_
 if($conn2){_x000D_
 echo "Conexión a la base de datos <strong>$db</strong> Exitosa!";_x000D_
 }_x000D_
}catch (PDOException $e){_x000D_
 // Reportar mensaje de error_x000D_
 echo $e->getMessage();_x000D_
}

_x000D_

_x000D_

_x000D_

Y aqui hago mi consulta y trato de mostrar el resultado, me imagino que el error es de principiante.

_x000D_

_x000D_

<?php_x000D_
include ('pdoconnectexpo.php');_x000D_
/*_x000D_
$query = "SELECT usuario FROM usuarios WHERE usuario='luis'";_x000D_
$result = pg_query($query);_x000D_
$row = pg_fetch_assoc($result);_x000D_
if ($result){_x000D_
echo $row['usuario'];_x000D_
}else{_x000D_
  echo "error en la consulta";_x000D_
}_x000D_
*/_x000D_
include ('pdoconnectexpo.php');_x000D_
_x000D_
$query = 'SELECT usuario FROM "public".usuarios WHERE usuario=:usuario';_x000D_
$registros = $conn2->prepare( $query ); //Preparamos la consulta_x000D_
$registros->execute( array(":usuario" => $usuario) ); //Le pasamos el valor al marcador, esto es un array por lo que soporta tanto valores requiera la query, separador por coma_x000D_
$registros = $registros->fetchAll( PDO::FETCH_OBJ ); //convirtiendo el resultado en objetos para poder iterar en un ciclo._x000D_
$registros[0]->usuario;_x000D_
foreach ( $registros as $datos){_x000D_
  echo $datos->usuario;_x000D_
}_x000D_
?>

_x000D_

_x000D_

_x000D_

solución

Cuando trabajas con postgres en tu SQL debes incluir el esquema en tu consulta, si este no tiene un nombre dentro del estándar debe ir entre comillas dobles;

Dígase que tu esquema tiene un nombre que incluye mayúsculas, guion
(-) o espacios.

$query = 'SELECT usuario FROM "mi_esquema".usuarios WHERE usuario=:usuario ';

Nota que he encerrado el string en comillas simples para poder incluir
las dobles dentro de la cadena, también date cuenta que incluí un
marcador en la consulta de esta manera preparamos una consulta para
evitar la inyección sql.

Luego procedemos a ejecutar la query;

    $usuario = 'luis';
    $registros = $mi_conexion->prepare( $query ); //Preparamos la consulta      
    $registros->execute( array(":usuario" => $usuario) ); //Le pasamos el valor al marcador, esto es un array por lo que soporta tanto valores requiera la query, separador por coma
    $registros = $registros->fetchAll( PDO::FETCH_OBJ ); //convirtiendo el resultado en objetos para poder iterar en un ciclo.

Hasta este punto ya tienes ejecutada tu query y almacenado el resultado como objetos en la variable $registros, si deseas acceder unicamente al primer registro lo puedes hacer de la siguiente manera;

<?= $registros[0]->usuario ?>

Ahora si lo que deseas es recorrer todos los registros que existan dentro de este resultado lo logras con un foreach;

foreach ( $registros as $datos){
  echo $datos->usuario;
}

Nota que he hecho referencia en el foreach al campo el cual devuelte
tu query, de tener mas campos puedes hacerlo de la misma manera,
ejemplifico;

foreach ( $registros as $datos){
      echo $datos->usuario;
      echo $datos->edad;
      echo $datos->peso;
    }
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *