Ver Mensaje Individual
  #2 (permalink)  
Antiguo 28/11/2013, 16:08
Avatar de marlanga
marlanga
 
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: Utilizar datos de Consulta Parametrizada

No se te ocurra mostrar los errores de mysqli en la pantalla, o los intrusos podrán ver cómo está construida tu tabla si el servidor falla, por lo menos cuando pongas el código en producción (en funcionamiento real). Usa mensajes de error genéricos que no den pistas de nada.

La consulta no necesita () en los interrogantes, bórralos. Tampoco te recomiendo que uses el asterisco, por motivos que verás despues.
Código PHP:
Ver original
  1. $sentencia = $mysqli->prepare("SELECT contrasena, salt_contrasena FROM CP_usuarios WHERE usuario = ?");

Las consultas preparadas no se ejecutan con query. Se ejecutan con
Código PHP:
Ver original
  1. $sentencia->bind_result($contrasena, $salt);
Hay que poner una variable (no importa que no esté declarada) por cada campo que devuelva el select, en el mismo orden en el que los declaraste. Si usaras asterisco en la consulta, el asunto para recuperar los parámetros se complica mucho. No te digo cómo se hace porque te liarás. Mejor indicarlos como te he puesto.
Si la consulta devolviera muchas filas, se utiliza el bucle
while($sentencia->fetch()) { //blablabla }

Pero a tí te basta con ejecutarlo una vez, porque sólo se espera un resultado.
Código PHP:
Ver original
  1. $sentencia->fetch();

Y ya puedes empezar a utilizarlos:
Código PHP:
Ver original
  1. crypt($contrasena, $salt);

Aunque no estaría demás comprobar que la consulta te devolvió exactamente 1 resultado. Eso se hace con
Código PHP:
Ver original
  1. $sentencia->store_result();
Justo después del EXECUTE. Eso pasará los resultados de la consulta a un buffer, lo que permitirá consultar el número de filas devueltas con
Código PHP:
Ver original
  1. echo $sentencia->num_rows;