1. Conexão com o Banco de Dados usando MySQLi com Tratamento de Erros
Este exemplo mostra como conectar ao banco de dados com MySQLi, verificando se a conexão foi bem-sucedida e tratando erros de forma adequada.
<?php
$servername = "localhost";
$username = "u689486913_teste";
$password = "$%SDFG63456sd";
$dbname = "u689486913_teste";
// Criação da conexão
$conn = new mysqli($servername, $username, $password, $dbname);
// Verifica se a conexão foi estabelecida
if ($conn->connect_error) {
die("Falha na conexão: " . $conn->connect_error);
}
// Executa uma consulta
$sql = "SELECT id, nome, email FROM usuarios";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// Saída dos dados de cada linha
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Nome: " . $row["nome"]. " - Email: " .
$row["email"]. "
";
}
} else {
echo "0 resultados";
}
// Fechar a conexão
$conn->close();
?>
2. Usando Conexões Persistentes com MySQLi
As conexões persistentes podem ser úteis em ambientes de alta carga, onde abrir e fechar conexões frequentemente pode ser custoso.
<?php
$servername = "p:localhost"; // O prefixo 'p:' indica uma conexão
persistente
$username = "u689486913_teste";
$password = "$%SDFG63456sd";
$dbname = "u689486913_teste";
// Criação da conexão persistente
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Falha na conexão: " . $conn->connect_error);
}
// Executa uma consulta
$sql = "SELECT id, nome, email FROM usuarios";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Nome: " . $row["nome"]. " - Email: " .
$row["email"]. "
";
}
} else {
echo "0 resultados";
}
// Fechar a conexão persistente
$conn->close();
?>
3. Usando Transações em MySQLi
As transações são importantes quando você precisa garantir que um conjunto de operações no banco de dados seja concluído com sucesso como uma unidade atômica.
$servername = "localhost";
$username = "u689486913_teste";
$password = "$%SDFG63456sd";
$dbname = "u689486913_teste";
// Criação da conexão
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Falha na conexão: " . $conn->connect_error);
}
// Desabilitar autocommit para iniciar a transação
$conn->autocommit(FALSE);
try {
// Primeira consulta
$sql1 = "INSERT INTO contas (nome, saldo) VALUES ('João', 1000)";
if (!$conn->query($sql1)) {
throw new Exception("Erro ao executar a primeira consulta: " .
$conn->error);
}
// Segunda consulta
$sql2 = "UPDATE contas SET saldo = saldo - 500 WHERE nome =
'João'";
if (!$conn->query($sql2)) {
throw new Exception("Erro ao executar a segunda consulta: " .
$conn->error);
}
// Confirmar a transação
$conn->commit();
echo "Transação concluída com sucesso.";
} catch (Exception $e) {
// Reverter a transação em caso de erro
$conn->rollback();
echo "Erro: " . $e->getMessage();
}
// Fechar a conexão
$conn->close();
?>
4. Usando Prepared Statements com MySQLi para Prevenir SQL Injection
Prepared Statements ajudam a prevenir ataques de SQL Injection e são recomendados para manipulação de dados que envolvem entradas de usuários.
$servername = "localhost";
$username = "u689486913_teste";
$password = "$%SDFG63456sd";
$dbname = "u689486913_teste";
// Criação da conexão
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Falha na conexão: " . $conn->connect_error);
}
// Preparar o statement
$stmt = $conn->prepare("INSERT INTO usuarios (nome, email) VALUES
(?, ?)");
$stmt->bind_param("ss", $nome, $email);
// Definindo os valores e executando
$nome = "Maria";
$email = "maria@example.com";
$stmt->execute();
$nome = "Carlos";
$email = "carlos@example.com";
$stmt->execute();
echo "Novos registros criados com sucesso";
// Fechar o statement e a conexão
$stmt->close();
$conn->close();
?>
Os Prepared Statements são uma funcionalidade
poderosa e segura para executar consultas SQL no banco de dados. Eles
são especialmente úteis para prevenir ataques de SQL Injection, um dos
tipos mais comuns de vulnerabilidade em aplicações web.
Como Funcionam os Prepared Statements?
Um Prepared Statements é composto por dois passos principais:- Preparação da Consulta (Preparation):
- Primeiro, a consulta SQL é enviada ao banco de dados com parâmetros substituídos por placeholders, sem os valores reais.
- O banco de dados compila e otimiza a consulta sem ainda conhecer os valores que serão usados, garantindo que a estrutura da consulta seja segura e imutável.
- Execução da Consulta (Execution):
- Os valores reais são enviados separadamente e substituem os placeholders definidos anteriormente.
- O banco de dados executa a consulta já compilada, utilizando os valores fornecidos.
Benefícios dos Prepared Statements
- Segurança Contra SQL Injection:
- Como a consulta é compilada antes dos valores serem fornecidos, qualquer valor de entrada não pode alterar a estrutura da consulta SQL. Isso previne SQL Injection.
- Eficiência:
- Em situações onde a mesma consulta precisa ser executada várias vezes com diferentes valores, o uso de Prepared Statements pode ser mais eficiente. A consulta é compilada apenas uma vez, e os valores são aplicados múltiplas vezes.
- Legibilidade e Manutenção:
- Os Prepared Statements tornam o código mais organizado e legível, pois separa a estrutura da consulta dos valores dinâmicos.
Esses exemplos mostram como lidar com situações mais avançadas na conexão e interação com o banco de dados, como transações, conexões persistentes e o uso de Prepared Statements para segurança.