Usar PDO en PHP | Parte 2: Hacer consultas

Hola, tercera parte  del tutorial sobre PDO en PHP; como pone en el título, en esta parte os voy a enseñar cómo hacer consultas y así saber todo lo que uno ha de saber acerca de esta manera tan eficiente de manejar bases de datos en PHP. Primero veamos cómo se hace en MySQL y PHP normal, el de toda la vida:

<?php
$conexion = mysql_connect('localhost', 'usuario', 'contraseña') or die('Could not connect: ' . mysql_error());
mysql_select_db('bd', $conexion);
$sql = mysql_query("SELECT * from usuarios");
while($columna = mysql_fetch_array($sql)){
	echo $columna["Nombre"];
}
?>

Todo esto dejando de lado aspectos de seguridad, ya que esto podría ser “hackeable”. En PDO se hace de una manera completamente distinta pero a la vez mucho más segura, haciendo uso de los “prepared statements”, con el fin de que nuestra web sea más difícil de acceder. Se hace de la siguiente manera (aprovechando el código de la parte 1):

<?php
$nombre = "Juan";
try{
	$conn = new PDO('mysql:host=localhost;dbname=basededatos', $usuario, $contra);
	$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

	$sql = $conn->prepare('SELECT * FROM usuarios WHERE nombre = :Nombre');
	$sql->execute(array('Nombre' => $nombre));
	$resultado = $sql->fetchAll();

	foreach ($resultado as $row) {
		echo $row["Id"];
	}
}catch(PDOException $e){
	echo "ERROR: " . $e->getMessage();
}
?>

Se ve perfectamente que es distinto, que se hace de otra manera, pero realmente no es tan complicado, he aprovechado la tabla que cree en la primera parte del tutorial.

Pasamos a explicar un poco el código en detalle: primero hemos usado el método “prepare”, de la función conn, definida antes, y le hemos pasado la consulta como parámetro, cualquier consulta SQL, no hace falta que sea tan sencilla como esta, pero donde iría la variable “Nombre”, definida antes, he puesto “:Nombre”, y le he pasado eso como parámetro en un array dentro del execute en la línea siguiente (la línea 8). Más tarde he hecho un fetch para que me devuelva los datos de la consulta y para acabar, un foreach que imprime el resultado.

Cabe destacar el uso del fetch, ya que esta no es la única manera de usarlo en PDO. Si no se le pasa nada como parámetro, éste devolverá un array, pero también podemos definirlo para que devuelva un objeto, una instancia de clase, etc. Para esto solo tendremos que ponerle como parámetro lo siguiente:

  • PDO::FETCH_ASSOC: Es el que viene por defecto, que devuelve un array. Es el que se usa en este ejemplo.
  • PDO::FETCH_BOTH: que devuelve un array de otra manera (no voy a entrar muy en detalle, que el tutorial es para aprender lo básico).
  • PDO::FETCH_BOUND
  • PDO::FETCH_CLASS
  • PDO::FETCH_OBJ

Para más detalles acerca del fetch, no dudes consultar la documentación de PHP.

Finalmente, resta decir que para hacer otro tipo de consultas (INSERT, DELETE o  UPDATE), se hace de la misma manera.

Llegamos hasta el final de esta tercera parte del tutorial de PDO en PHP, en la última parte (la siguiente), haré un vídeotutorial y lo subiré a youtube con todo lo que hemos aprendido en esta serie.

Espero que os haya gustado y si es así, ¡no olvidéis comentar!

Acerca del autor:

Twitter del autor:

10 comments

  1. angel romero says:

    Saludos.
    Una pregunta. Si hago un formulario,para llenar una tabla y este a su vez necesita una información de otra que tengo en la base de datos; ¿como puedo hacer para llamar los datos, seleccionarlos, mostrarlos con un select y luego cargar los datos de la tabla destino?

  2. David says:

    Hola amigo muy interesante lo de Pdo pero se puede hacer consultas ajax también?
    Me refiero por ejemplo como Google Q cuando digiramos una letra en un input y se
    Se desplega las sugerencias ?
    Me podrías explicar cómo hacerlo por favor ?
    En la web hay vídeos q lo hacen utilizando librería JQuery pero se puede hacer solo con Ajax y conexión Pdo?

    Te agradezco muchísimos por tu gran aporte y ayuda

    Saludos cordiales

  3. David says:

    Hola amigo muy interesante lo de Pdo pero se puede hacer consultas ajax también?
    Me refiero por ejemplo como Google Q cuando digiramos una letra en un input y se
    Se desplega las sugerencias ?
    Me podrías explicar cómo hacerlo por favor ?
    En la web hay vídeos q lo hacen utilizando JQuery pero se puede hacer solo con Ajax y conexión Pdo?

    Te agradezco muchísimos por tu gran aporte y ayuda

    Saludos cordiales

  4. eutiximo says:

    y para este con PDO, no se cierra la conexion a la base de datos?

  5. Hans says:

    Muchas gracias por el tutorial me sirvio mucho.

  6. Hans says:

    Muchas gracias por el tutorial de conexion con PHP – PDO. me sirvio mucho.

  7. Manuel Garcia says:

    Veo que tienes dos ? en tu codigo eso supone que sean los valores que estas introduciendo?.

  8. Ariel says:

    Te hago una consulta.
    Luego de hacer una consulta a la base, anteriormente en php uno recuperaba datos de la siguiente manera:
    $result[‘id’];
    Como lo haria con PDO?
    Se puede hacer sin un foreach o un while?

    Slds!

  9. yuli says:

    hola estoy trabajando con pdo y he tenido problemas para hacer registros me sale este error
    “Fatal error: Call to a member function prepare() on a non-object in C:\xampp\htdocs\aja\SALVAVIDA\admin\model\core\datos_hospital.php on line 188″
    esta es la linea
    $result = $this->conexion->conex->prepare(“INSERT INTO hospital (nit_hospital, nombre_hospital)
    value (?, ?)”);

    quisiera saber si me puedes ayudar

    • Manuel Garcia says:

      Hola yo estoy siguiendo este hilo y creo yuli que si estas trabajando con pdo y ademas estas implementandolo dentro de una clase deberias replantearte como manejar eso si puedes enviar todo el codigo se te podria dar una ayuda mas certera.

Leave a Reply to Hans Cancel reply

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