Переменные bind_result () могут быть равны в bind_param ()?

Я начинаю видеть предстену statement SQL. У меня есть следующий код для простого login:

$stmt = $mysqli->prepare("SELECT id_admin,usuario,hash_pass FROM admins WHERE usuario = ?");
$stmt->bind_param("s", $usuario);
$stmt->execute();
$stmt->bind_result($id, $usuario, $hash_pass); 
while ($stmt->fetch())  /* obtener los valores */
{
    if(password_verify($password, $hash_pass)){ 
        $_SESSION['usuario'] = $usuario;
        $_SESSION['id'] = $id;
        header('location: admin-area.php');
        die();
    }
    else{
        $resultado =  "Datos incorrectos.";
    }
}

$stmt->free_result(); /* Libera la memoria de los resultados */
$stmt->close(); /* Cerrar la sentencia */
$mysqli->close(); /* Cerrar la conexion. */

Переменная, которую я перемещаю в bind_param() это $usuario, у него есть то же имя, что и переменная, которая произошла с ним в bind_result(). Я это протестировал и нет никакой проблемы. Это они могут быть равны или могла бы быть какая-то ошибка в более сложных решениях? Они были бы должны переменные иметь различные имена?

1
задан 18.01.2017, 19:38
0 ответов

Я думаю, что нет ничего из дьявола, хотя да, что нужно быть осторожно, проблема могла бы быть, не в твоем случае, он что когда-нибудь sobrescribas какая-то переменная с какой-то уже инициализировавшей стоимостью, которую последующий ты используешь.

Conclución:

Просто эти sobrescribiendo стоимость твоей переменной, в твоем случае ($usuario).

Мы анализируем логически:

Переменная ($usuario), это имя пользователя, которое ты получаешь с формуляра, Вашей стоимостью мог бы быть Фу, потом с вышеупомянутой переменной ты подтверждаешь, существует ли Фу в твоей Базе данных и в случае что, если существует Фу, присоединяешь Фу снова. А именно, действительно sobrescribes Фу снова в Фу.

Ты мог бы оптимизировать твою просьбу SQL следующего способа и он состоит в том, чтобы подтверждать что-то важное, если пользователь существует или нет:

$stmt = $mysqli->prepare("SELECT id_admin,hash_pass FROM admins WHERE usuario = ?");
$stmt->bind_param("s", $usuario);
$stmt->execute();
//Transfiere un conjunto de resultados desde una sentencia preparada
$stmt->store_result();
//Comprobamos si existe usuario.
if ($stmt->num_rows===1) { //Verdadero.
   $stmt->bind_result($id,$hash_pass); 
   while ($stmt->fetch()) {
       if(password_verify($password, $hash_pass)){ 
           $_SESSION['usuario'] = $usuario; //Usuario formulario no sobrescrito.
           $_SESSION['id'] = $id;
           header('location: admin-area.php');
           die();
       } else { //Contraseña incorrecto.
           $resultado =  "Datos incorrectos.";
       }
   }
} else { //Falso, usuario no existe.
  $resultado =  "Datos incorrectos.";
}
$stmt->close();

Заметь: это просто личное мнение, я не говорю, что был лучше или правильнее. Я лично мне нравится работать с аккуратным кодом, тогда мне не нравится перемешивать например переменные, которые я получаю с формуляра, с переменными, которые я извлекаю с Базы данных. Лично для различия я добавляю ‘BD’ в конце концов, пример был бы: bind_result ($usuarioBD);

0
ответ дан 03.12.2019, 17:38