Исключение с функциями в MySqli PDO, ориентируемом на объекты

Я только что начал использовать функции php 7 ориентируемых на объекты (по крайней мере функции mysqli, из-за которого предполагается, что они безопаснее). Однако, когда я загружаю страницу, останься нагруженным и он не бросает в меня ошибку, и я не понимаю почему. Когда я перемещаю ее из-за consoa debugeo уже да, он показывает мне следующее:

Se produjo una excepción.
Fatal error: Uncaught Error: Call to a member function bind_param() on
boolean in /srv/http/Mantis-rebirth/login.php:26 Stack trace:
#0 {main}   thrown

И мой код - следующий:

   <?php

    if (isset($_POST['nombre']) && isset($_POST['pass'])) {
        $usuario = stripslashes(trim($_POST['nombre']));
        $pass = stripslashes(trim($_POST['pass']));

        //ciframos la contraseña
        //$coste = ['coste'=>18];
        //$passhash = password_hash($pass, PASSWORD_DEFAULT,$coste);
        if (strlen($pass)>= 8) {
                //He seguido la siguiente documentación: https://www.w3schools.com/php/php_mysql_prepared_statements.asp
                //Definimos los parámetros de mysqli, primero estableciendo los parámetros de conexión:
                $nombreserver = "localhost";
                $usuario = "root";
                $contra = "";
                $bd = "mantis";
                $conexion = mysqli_connect($nombreserver, $usuario, $contra, $bd);
            //comprobamos que podemos establecer conexión
           if ($conexion -> connect_error){
            die("No se pudo conectar ".$conexion->connect_error);
           }
           else {
               //Preparamos la consulta
               $consultaprep = $conexion -> prepare("SELECT contrasena FROM jugadores WHERE (nombre = ?) AND (contrasena = ?)");
               //Ligamos los parámetros
               $consultaprep -> bind_param("ss", $usuario, $pass);
               //Ejecutamos la consulta
               $consultaprep ->execute();
               $consulta = $consultaprep -> fetch();

               if(password_verify($pass,$consulta)){
                    echo "Enhorabuana, te has logueado";
               }
               else {
                   die("La contraseña o el nombre no coinciden");
               }
               $consultaprep -> close();
               $conexion -> close();
           }
        }
        else {
            die("La contraseña no cumple los requisitos");
        }
    }
    else {
            die("Mira, te comento, debes introducir los datos, ¿VALE?");
        }
?>
0
задан 07.07.2017, 14:19
3 ответа

Оказывается, что в конце концов не состояла s¦lo консультация, а балласт múltiples ошибки, например, в том, что bd exportà плохо и varchar 255 мне их поместил в varchar 25, имя переменной nick игрока было равно как тот, который hac¦ - в conexi¦n в базу данных... и т.д. Функциональный c¦digo этот: https://github.com/RafaelAybar/Mantis-rebirth/tree/pruebas

0
ответ дан 24.11.2019, 07:46

Так или иначе его состояло бы в том, чтобы помещать это внутри Try-Catch и transaccionarlo, для, когда есть несколько queries. Этот код, что usamoos мы в Codeigniter, но который не стоил тебе expolarlo в другой проект с другим framework:

try {
    $this->BBDD->trans_start();
    $this->BBDD->conn_id->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = "INSERT INTO `tabla` "
            . "(campos) "
            . "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
    $query = $this->bbdd->conn_id->prepare($sql);
    $item = array(tus valores);

    $success = $query->execute($item);
    $lastId = $this->esquema0->insert_id();
    $this->bbdd->trans_complete();
} catch (Exception $e) {
    $success = False;
    $error = array("typeError" => "Error", "code" => $e->getCode(), "message" => $e->getMessage(), 'trace'=>$e->getTrace());
}

Таким образом ты включаешь errmode_exception, и если есть один, расколитесь ввиду PDO ты сможешь захватывать это и представлять очень полно.

Приветствие, Пощечина.

0
ответ дан 24.11.2019, 07:46

Хорошие, я наблюдал аномалию в твоем коде

Эта в линии $passhash = password_hash($pass, PASSWORD_DEFAULT,$coste);

Для того, чтобы ты это реализуешь? Предполагается, что он та contraseña usario?

, Если ты делаешь echo $passHash veras, который на каждое выполнение меняет стоимость.

Видя docu из bind_param в примерах, распределяют стоимость в переменные после bind_param, попытайся загружать линии ассигнование пользователя и contraseña

0
ответ дан 24.11.2019, 07:46

Теги

Похожие вопросы