Skip to content

Instantly share code, notes, and snippets.

@renatoapcosta
Last active April 11, 2022 23:58
Show Gist options
  • Save renatoapcosta/b80f43d19d30e4d7ae7e541010a3a993 to your computer and use it in GitHub Desktop.
Save renatoapcosta/b80f43d19d30e4d7ae7e541010a3a993 to your computer and use it in GitHub Desktop.
MySQL PHP

MySQL PHP

No PHP 7, teve uma mudança significativa. Temos duas escolhas para trabalhar com banco de dados.

  • Classe mysqli (Legado )
  • PDO ( Aconselhavel )

mysqli

Primeiro vamos fazer uma conexão:

$conn = new mysqli("localhost", "root", "root", "dbphp7");

Para se proteger de erros

if ($conn->connect_error) {
  echo "Error: " . $conn->connect_error;
  exit;
}

Inserindo dados

$stmt = $conn->prepare("INSERT INTO tb_usuarios (deslogin, dessenha) VALUES(?, ?)");

$stmt->bind_param("ss", $login, $pass);

$login = "user";
$pass = "12345";

$stmt->execute();

$login = "root";
$pass = "!@#$";

$stmt->execute();

Consultando dados

$result = $conn->query("SELECT * FROM tb_usuarios ORDER BY deslogin");

$data = array();
while ($row = $result->fetch_assoc()) {
  array_push($data, $row);
}

echo json_encode($data);

PDO

PHP Data objects, esta é a forma recomendada para acessar dados no PHP.

Com PDO conseguimos uma maneira homogenea de trabalhar com os banco de dados.

Permite também trabalhar com transação.

Conexão

Conexão com MySQL

$conn = new PDO("mysql:dbname=dbphp7;host=localhost", "root", "root");

Conexão SQLServer

$conn = new PDO("sqlsrv:Database=dbphp7;server=localhost\SQLEXPRESS;ConnectionPooling=0", "sa", "root");

Consultando dados

$stmt = $conn->prepare("SELECT * FROM tb_usuarios ORDER BY deslogin;");
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($results as $row) {
  foreach ($row as $key => $value) {
    echo "<strong>" . $key . ":</strong>" . $value . "<br/>";
  }
  echo "====================================================<br/>";
}

Inserindo dados

$stmt = $conn->prepare("INSERT INTO tb_usuarios (deslogin, dessenha) VALUES(:LOGIN, :PASSWORD)");

$login = "jose";
$password = "1234567890";

$stmt->bindParam(":LOGIN", $login);
$stmt->bindParam(":PASSWORD", $password);

$stmt->execute();

Atualizando dados

$stmt = $conn->prepare("UPDATE tb_usuarios SET desslogin = :LOGIN, dessenha = :PASSWORD WHERE idusuario = :ID");

$login = "joao";
$password = "qwerty";
$id = 2;

$stmt->bindParam(":LOGIN", $login);
$stmt->bindParam(":PASSWORD", $password);
$stmt->bindParam(":ID", $id);

$stmt->execute();

Deletando um registro

$stmt = $conn->prepare("DELETE FROM tb_usuarios WHERE idusuario = :ID");

$id = 1;

$stmt->bindParam(":ID", $id);

$stmt->execute();

Transações

$conn->beginTransaction();

$stmt = $conn->prepare("DELETE FROM tb_usuarios WHERE idusuario = ?");

$id = 2;

$stmt->execute(array($id));

// $conn->rollback();
$conn->commit();

DAO

Vamos construir uma classe Usuario para acessar dados do banco.

./config.php

spl_autoload_register(function ($class_name) {
  $filename = "class" . DIRECTORY_SEPARATOR . $class_name . ".php";
  if (file_exists(($filename))) {
    require_once($filename);
  }
});

.class/Sql.php

class Sql extends PDO {

	private $conn;

	public function __construct(){
		$this->conn = new PDO("mysql:host=localhost;dbname=dbphp7", "root", "root");
	}

	private function setParams($statement, $parameters = array()){
		foreach ($parameters as $key => $value) {
			$this->setParam($statement, $key, $value);
		}
	}

	private function setParam($statement, $key, $value){
		$statement->bindParam($key, $value);
	}

	public function query($rawQuery, $params = array()){
		$stmt = $this->conn->prepare($rawQuery);
		$this->setParams($stmt, $params);
		$stmt->execute();
		return $stmt;
	}

	public function select($rawQuery, $params = array()):array {
		$stmt = $this->query($rawQuery, $params);
		return $stmt->fetchAll(PDO::FETCH_ASSOC);
	}
}

./class/Usuario.php

class Usuario {

  private $idusuario;
  private $deslogin;
  private $dessenha;
  private $dtcadastro;

  public function getIdusuario() {
    return $this->idusuario;
  }

  public function setIdusuario($value) {
    $this->idusuario = $value;
  }

  public function getDeslogin() {
    return $this->deslogin;
  }

  public function setDeslogin($value) {
    $this->deslogin = $value;
  }

  public function getDessenha() {
    return $this->dessenha;
  }

  public function setDessenha($value) {
    $this->dessenha = $value;
  }

  public function getDtcadastro() {
    return $this->dtcadastro;
  }

  public function setDtcadastro($value) {
    $this->dtcadastro = $value;
  }

  public function loadById($id) {
    $sql = new Sql();
    $results = $sql->select("SELECT * FROM tb_usuarios WHERE idusuario = :ID", array(":ID" => $id));

    if (count($results) > 0) {
      $this->setData($results[0]);
    }
  }

  public static function getList() {
    $sql = new Sql();
    return $sql->select("SELECT * FROM tb_usuarios ORDER BY deslogin;");
  }

  public static function search($login) {
    $sql = new Sql();
    return $sql->select("SELECT * FROM tb_usuarios WHERE deslogin LIKE :SEARCH ORDER BY deslogin", array(':SEARCH' => "%" . $login . "%"));
  }

  public function login($login, $password) {
    $sql = new Sql();
    $results = $sql->select("SELECT * FROM tb_usuarios WHERE deslogin = :LOGIN AND dessenha = :PASSWORD", array(":LOGIN" => $login, ":PASSWORD" => $password));

    if (count($results) > 0) {
      $this->setData($results[0]);
    } else {
      throw new Exception("Login e/ou senha inválidos.");
    }
  }

  public function setData($data) {
    $this->setIdusuario($data['idusuario']);
    $this->setDeslogin($data['deslogin']);
    $this->setDessenha($data['dessenha']);
    $this->setDtcadastro(new DateTime($data['dtcadastro']));
  }

  public function insert() {
    $sql = new Sql();

    $results = $sql->select("CALL sp_usuarios_insert(:LOGIN, :PASSWORD)", array(':LOGIN' => $this->getDeslogin(), ':PASSWORD' => $this->getDessenha()));

    if (count($results) > 0) {
      $this->setData($results[0]);
    }
  }

  public function update($login, $password) {
    $this->setDeslogin($login);
    $this->setDessenha($password);

    $sql = new Sql();

    $sql->query("UPDATE tb_usuarios SET deslogin = :LOGIN, dessenha = :PASSWORD WHERE idusuario = :ID", array(':LOGIN' => $this->getDeslogin(), ':PASSWORD' => $this->getDessenha(), ':ID' => $this->getIdusuario()));

  }

  public function delete() {
    $sql = new Sql();
    $sql->query("DELETE FROM tb_usuarios WHERE idusuario = :ID", array(':ID' => $this->getIdusuario()));

    $this->setIdusuario(0);
    $this->setDeslogin("");
    $this->setDessenha("");
    $this->setDtcadastro(new DateTime());
  }

  public function __construct($login = "", $password = "") {
    $this->setDeslogin($login);
    $this->setDessenha($password);
  }

  public function __toString() {
    return json_encode(array("idusuario" => $this->getIdusuario(), "deslogin" => $this->getDeslogin(), "dessenha" => $this->getDessenha(), "dtcadastro" => $this->getDtcadastro()->format("d/m/Y H:i:s")));
  }
}

Utilizando

./index.php

// Carrega um usuário
$root = new Usuario();
$root->loadbyId(3);
echo $root;
// Carrega uma lista de usuários
$lista = Usuario::getList();
echo json_encode($lista);
// Carrega uma lista de usuários buscando pelo login
$search = Usuario::search("jo");
echo json_encode($search);
// Carrega um usuário usando o login e a senha
$usuario = new Usuario();
$usuario->login("root", "!@#$");
echo $usuario;
// Criando um novo usuário
$aluno = new Usuario("aluno", "@lun0");
$aluno->insert();
echo $aluno;
// Alterar um usuário
$usuario = new Usuario();
$usuario->loadById(8);
$usuario->update("professor", "!@#$%¨&*");
echo $usuario;
// Deletando um usuario
$usuario = new Usuario();
$usuario->loadById(7);
$usuario->delete();
echo $usuario;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment