PHP - Duda con cunsulta PDO

 
Vista:
Imágen de perfil de Steven

Duda con cunsulta PDO

Publicado por Steven (1 intervención) el 25/10/2015 22:50:26
Buenas, el inconveniente que tengo es el siguiente;

Tengo una función que realiza la búsqueda de un ID en UN campo de una tabla en mi base de datos MySql mediante una conexion con PDO, y todo va bien solo que quisiera optimizar un poco el sistema haciendo que la funcion pueda buscar cualquier valor en cualquier campo que le pase como parámetro.

Mi función está de la siguiente manera:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public function get_usuario($id_usuario=''){
 
	if($id_usuario != ''){
 
		//iniciamos una conexion a la base de datos
		$this->objConexion = new Conexion();
 
		//consulta para traer el registro del usuario al que hace referencia $id_usuario
		$this->objConexion->query = $this->objConexion->prepare('SELECT *
			FROM usuarios 
			WHERE id_usuario = :id_usuario');
		$this->objConexion->query->bindParam(':id_usuario', $id_usuario);
		$this->objConexion->query->execute();
 
		//comando que devuelve el numero de filas afectadas por la sentencia
		$this->objConexion->rows = $this->objConexion->query->rowCount();
 
		if($this->objConexion->rows == 1){
			//sentencia que devuelve un array con todas las filas del resultado de la consulta
			$this->objConexion->result = $this->objConexion->query->fetchAll();
 
			//asignamos a cada propiedad de la clase el valor de su correspondiente
			//campo en la tabla `usuarios` del registro que trajo la consulta
			foreach ($this->objConexion->result[0] as $propiedad => $valor){
				$this->$propiedad = $valor;
			}
 
			//indicamos que el usuario fue encontrado
			$this->mensaje = 'Usuario encontrado';
 
		}else {
 
			//indicamos que el usuario no fue encontrado
			$this->mensaje = 'Usuario no encontrado';
 
		}
 
		//cerramos la conexion con la base de datos
		$this->objConexion = null;
 
	}
}

He probado lo que comento pero según he leido no puedo hacerlo sustituyendo dinámicamente el campo de la tabla con las funciones bindParam() y bindValue(), es decir haciendo esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public function get_usuario($valor_prueba, $campo_prueba){
 
	if($valor_prueba != ''){
 
		//iniciamos una conexion a la base de datos
		$this->objConexion = new Conexion();
 
		//consulta para traer el registro del usuario al que hace referencia $id_usuario
		$this->objConexion->query = $this->objConexion->prepare('SELECT *
			FROM usuarios
			WHERE :campo_prueba = :valor_prueba');
		$this->objConexion->query->bindParam(':campo_prueba', $campo_prueba);
		$this->objConexion->query->bindParam(':valor_prueba', $valor_prueba);
		//echo 'Campo= '.$campo_prueba.'Valor= '.$valor_prueba;
		$this->objConexion->query->execute();
 
		//comando que devuelve el numero de filas afectadas por la sentencia
		$this->objConexion->rows = $this->objConexion->query->rowCount();
 
		if($this->objConexion->rows == 1){
			//sentencia que devuelve un array con todas las filas del resultado de la consulta
			$this->objConexion->result = $this->objConexion->query->fetchAll();
 
			//asignamos a cada propiedad de la clase el valor de su correspondiente
			//campo en la tabla `usuarios` del registro que trajo la consulta
			foreach ($this->objConexion->result[0] as $propiedad => $valor){
				$this->$propiedad = $valor;
			}
 
			//indicamos que el usuario fue encontrado
			$this->mensaje = 'Usuario encontrado';
 
		}else {//echo 'malo1';
 
			//indicamos que el usuario no fue encontrado
			$this->mensaje = 'Usuario no encontrado';
 
		}
 
		//cerramos la conexion con la base de datos
		$this->objConexion = null;
 
	}
}

Agradecería que me dijeran si es posible hacerlo de otra manera o con algún otro método de PDOStatement o PDO.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Duda con cunsulta PDO

Publicado por xve (6935 intervenciones) el 26/10/2015 07:40:19
Hola Steven, hasta donde yo se, eso no es posible, ya que tanto el valor asigano con bindParam como bindValue, hacen referencia a valores, no a campos de la base de datos.

Una manera, es que lo hagas reemplazando el nombre algo así:
1
2
3
$this->objConexion->query = $this->objConexion->prepare('SELECT *
	FROM usuarios
	WHERE `".$campo_prueba."` = :valor_prueba');

De todas maneras, yo que llevo varios años desarrollando el PHP, si alguna vez nos hemos encontrado con alguna situación de este tipo, duplicamos la función con otro nombre, ya que es otro tipo de consulta... de todas maneras, esto se da muy pocas veces.

Espero que te sirva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar