Jump to content
Fórum Script Brasil
  • 0

Todas as colunas da tabela são retornadas, menos a de id


iNosuKe 么

Question

Estou criando um pequeno crud, em um projeto de controle de usuário. E na lógica de login, possuo um método responsável por fazer uma consulta ao bd, baseada nas informações cedidas no form. A consulta retorna todos os campos, menos o de id.

Segue a classe e o método responsável pela consulta:

<?php

declare(strict_types=1);

namespace app\models;

use app\database\Connection;
use app\database\entyties\User;
use \PDO;
use \PDOException;

class LoginModel
{
    public static function getUser(User $user): ?User
    {
        try {
            $instance = Connection::getInstance();

            $SQL = "SELECT * FROM user u WHERE u.email = :e AND u.password = :p";

            $state = $instance->prepare($SQL);
            $state->bindValue(":e", $user->getEmail());
            $state->bindValue(":p", $user->getPassword());
            $state->execute();

            $result = $state->fetch(PDO::FETCH_ASSOC);

            if ($result) {
                echo "<pre>";
                var_dump($result);
                echo "</pre>";

                exit;


                return new User(
                    $result["email"],
                    $result["password"],
                    $result["name"],
                    $result["id"]
                );
            }

            return null;
        } catch (PDOException $e) {
            echo $e->getMessage();
        }

        return null;
    }
}

A classe User em questão: 

<?php

declare(strict_types=1);

namespace app\database\entyties;

class User
{
    private string $name;
    private string $email;
    private string $password;
    private int $id;

    public function __construct(
        string $email,
        string $password,
        string $name = "",
        int $id = 0
    ) {
        $this->id = $id;
        $this->name = $name;
        $this->email = $email;
        $this->password = $password;
    }

    public function getId(): int
    {
        return $this->id;
    }

    public function getName(): string
    {
        return $this->name;
    }

    public function setName(string $name): void
    {
        $this->name = $name;
    }

    public function getEmail(): string
    {
        return $this->email;
    }

    public function setEmail(string $email): void
    {
        $this->email = $email;
    }

    public function getPassword(): string
    {
        return $this->password;
    }

    public function setPassword(string $password): void
    {
        $this->password = $password;
    }
}

 

No debug, a saída é a seguinte: 

array(4) {
  ["id"]=>
  int(2)
  ["name"]=>
  string(7) "Matheus"
  ["email"]=>
  string(15) "teteu@gmail.com"
  ["password"]=>
  string(8) "12345678"
}

O que poderia acarretar esse comportamento? 

Adicional, preview da tabela: 

MariaDB [enose]> describe user;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| name     | varchar(50)  | NO   |     | NULL    |                |
| email    | varchar(50)  | NO   |     | NULL    |                |
| password | varchar(255) | NO   |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
4 rows in set (0.018 sec)

 

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Não entendi a sua questão, o id é o primeiro item que aparece no seu depurador.

Mesmo assim, eu gostei do código. Eu nunca tinha visto declare(strict_types=1), eu tirei ele do código, e isso me deu um baita trabalho na hora de criar o public function setId, precisei fazer assim:

public function setId(int $id): int { $this->id=$id; return $id;}

Com essa declaração, você não precisa retornar o $id explicitamente.

Para quem quer fazer o teste, fiz algumas modificações:

arquivo index.php
<?php

declare(strict_types=1);

class User
{
    private string $name, $email, $password;
    private int $id;

    public function __construct(string $name, string $email, string $password, int $id = 0) 
    {
        $this->name = $name;
        $this->email = $email;
        $this->password = $password;
        $this->id = $id;
    }

    public function getId(): int { return $this->id; }
    public function setId(int $id): int { $this->id=$id; }
    public function getName(): string { return $this->name; }
    public function setName(string $name): void { $this->name = $name; }
    public function getEmail(): string { return $this->email; }
    public function setEmail(string $email): void { $this->email = $email; }
    public function getPassword(): string { return $this->password; }
    public function setPassword(string $password): void { $this->password = $password; }
}

class LoginModel
{
    public static function getUser(User $user)
    {
        try {
                $instance = new PDO("mysql:host=localhost;dbname=teste","root","");
                $SQL = "SELECT * FROM user WHERE email = :e AND password = :p";
                $state = $instance->prepare($SQL);
                $state->bindValue(":e", $user->getEmail());
                $state->bindValue(":p", $user->getPassword());
                $state->execute();
                $result = $state->fetch(PDO::FETCH_ASSOC);
                if ($result) 
                { 
                    return new User($result["name"],$result["email"],$result["password"],$result["id"]);
                }
            } catch (PDOException $e) {
                echo $e->getMessage();
            }
    }
}

$user=new User("Matheus","teteu@gmail.com","12345678");
$loggedInUser=LoginModel::getUser($user);
if($loggedInUser)
{
    echo "Você entrou, bem vindo ". $loggedInUser->getName() . "o seu id é " .$loggedInUser->getId();
} else {
    echo "Favor verificar nome e senha";
}

 

Edited by Frank K Hosaka
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      652k
×
×
  • Create New...