No PHP 7, teve uma mudança significativa. Temos duas escolhas para trabalhar com banco de dados.
- Classe mysqli (Legado )
- PDO ( Aconselhavel )
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;
}
$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();
$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);
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 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");
$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/>";
}
$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();
$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();
$stmt = $conn->prepare("DELETE FROM tb_usuarios WHERE idusuario = :ID");
$id = 1;
$stmt->bindParam(":ID", $id);
$stmt->execute();
$conn->beginTransaction();
$stmt = $conn->prepare("DELETE FROM tb_usuarios WHERE idusuario = ?");
$id = 2;
$stmt->execute(array($id));
// $conn->rollback();
$conn->commit();
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;