
Dato inesperado en prepare() de mysqli y PDO (algun bug?)
Publicado por Armando (2 intervenciones) el 12/12/2014 06:36:45
Buenas noches que tal espero me puedan ayudar con esta tema que me esta quitando la tranquilidad
, por su atención gracias.
Tengo una duda referente al tema de sentencias preparadas de mysqli y PDO.
En "mysql" tengo la tabla de "usuarios" con los siguientes campos:
Y el método del la clase en php
El punto aquí es que al realizar una búsqueda de algún usuario de la tabla por medio de su id como en este ejemplo:
me devuelve los datos correctamente de acuerdo al usuario que almacena ese "id" o el que corresponda. Pero, si por ejemplo yo a la url le agrego esto:
O cualquier combinación de caracteres, siempre y cuando aparezca un número antes, pero que este id corresponda a algún usuario. Entonces la consulta se llevaría acabo y bueno lógicamente no me devolvería nada porque no coincide, pero saben me lleve la sorpresa de que me entrega los resultados de ese usuario, en este caso del id "1" o cualquier otro id que maneje, y buscando no encuentro la razón y bueno por curiosidad, intente hacer el código pero sin usar sentencias preparadas si no hacer directamente esto
y usando estos ejemplos
entones si que no me devuelve nada la consulta.
Espero haber podido explicarme bien y de igual forma si alguien tiene alguna respuesta lógica
que me pueda ayudar porque estoy algo confuso sobre todo porque se supone que evitan las inyecciones de código...
Por su atención muchas gracias.

Tengo una duda referente al tema de sentencias preparadas de mysqli y PDO.
En "mysql" tengo la tabla de "usuarios" con los siguientes campos:
1
id_usuario
1
nombre
1
telefono
1
1
password
Y el método del la clase en php
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
public function editUsers()
{
$connection = self::connect(); //recibo la instancia de la clase mysqli
$sql = "SELECT nombre, telefono, email, password from usuarios WHERE id_usuario = ?";
$stmt = $connection->prepare($sql);
$stmt->bind_param("i", $id_usuario);
$id_usuario = $_GET["id"];
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows) {
$stmt->bind_result($nombre, $apellido, $telefono, $email, $password);
while ($stmt->fetch()) {
$this->row = array($nombre, $apellido, $telefono, $email, $password);
}
$stmt->free_result();
$stmt->close();
$connection->close();
return $this->row;
} else {
return 0;
}
}
El punto aquí es que al realizar una búsqueda de algún usuario de la tabla por medio de su id como en este ejemplo:
1
http://localhost/php/php-poo/mysqli/editar.php?id=1
me devuelve los datos correctamente de acuerdo al usuario que almacena ese "id" o el que corresponda. Pero, si por ejemplo yo a la url le agrego esto:
1
http://localhost/php/php-poo/mysqli/editar.php?id=1rtt.232
O cualquier combinación de caracteres, siempre y cuando aparezca un número antes, pero que este id corresponda a algún usuario. Entonces la consulta se llevaría acabo y bueno lógicamente no me devolvería nada porque no coincide, pero saben me lleve la sorpresa de que me entrega los resultados de ese usuario, en este caso del id "1" o cualquier otro id que maneje, y buscando no encuentro la razón y bueno por curiosidad, intente hacer el código pero sin usar sentencias preparadas si no hacer directamente esto
1
query("SELECT nombre, telefono, email, password from usuarios WHERE id_usuario = ".$_GET['id']."");
y usando estos ejemplos
1
http://localhost/php/php-poo/mysqli/editar.php?id=1rtt.232
1
http://localhost/php/php-poo/mysqli/editar.php?id=1ddfds
1
http://localhost/php/php-poo/mysqli/editar.php?id=1.0fssd
entones si que no me devuelve nada la consulta.
Espero haber podido explicarme bien y de igual forma si alguien tiene alguna respuesta lógica
que me pueda ayudar porque estoy algo confuso sobre todo porque se supone que evitan las inyecciones de código...
Por su atención muchas gracias.
Valora esta pregunta


1