Para fazer operações de banco de dados em PHP de forma segura e evitar injeções de SQL, você deve usar declarações preparadas (prepared statements) fornecidas pela extensão PDO (PHP Data Objects) ou MySQLi. Ambas as extensões fornecem uma maneira segura de lidar com consultas SQL, evitando a injeção de SQL ao separar a lógica da consulta dos dados de entrada.
Usando PDO
Conexão ao Banco de Dados
php
<?php
try {
$pdo = new PDO('mysql:host=localhost;dbname=nome_do_banco', 'usuario', 'senha');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Erro: ' . $e->getMessage();
}
?>
INSERT
php
<?php
$stmt = $pdo->prepare("INSERT INTO tabela (coluna1, coluna2) VALUES (:valor1, :valor2)");
$stmt->execute(['valor1' => $valor1, 'valor2' => $valor2]);
?>
SELECT
php
<?php
$stmt = $pdo->prepare("SELECT * FROM tabela WHERE coluna = :valor");
$stmt->execute(['valor' => $valor]);
$resultado = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
UPDATE
php
<?php
$stmt = $pdo->prepare("UPDATE tabela SET coluna1 = :valor1 WHERE coluna2 = :valor2");
$stmt->execute(['valor1' => $novo_valor1, 'valor2' => $valor2]);
?>
DELETE
php
<?php
$stmt = $pdo->prepare("DELETE FROM tabela WHERE coluna = :valor");
$stmt->execute(['valor' => $valor]);
?>
Usando MySQLi
Conexão ao Banco de Dados
php
<?php
$mysqli = new mysqli("localhost", "usuario", "senha", "nome_do_banco");
if ($mysqli->connect_error) {
die("Conexão falhou: " . $mysqli->connect_error);
}
?>
INSERT
php
<?php
$stmt = $mysqli->prepare("INSERT INTO tabela (coluna1, coluna2) VALUES (?, ?)");
$stmt->bind_param("ss", $valor1, $valor2);
$stmt->execute();
$stmt->close();
?>
SELECT
php
<?php
$stmt = $mysqli->prepare("SELECT * FROM tabela WHERE coluna = ?");
$stmt->bind_param("s", $valor);
$stmt->execute();
$resultado = $stmt->get_result();
$dados = $resultado->fetch_all(MYSQLI_ASSOC);
$stmt->close();
?>
UPDATE
php
<?php
$stmt = $mysqli->prepare("UPDATE tabela SET coluna1 = ? WHERE coluna2 = ?");
$stmt->bind_param("ss", $novo_valor1, $valor2);
$stmt->execute();
$stmt->close();
?>
DELETE
php
<?php
$stmt = $mysqli->prepare("DELETE FROM tabela WHERE coluna = ?");
$stmt->bind_param("s", $valor);
$stmt->execute();
$stmt->close();
?>
Importância das Declarações Preparadas
Segurança: Separar os dados da lógica da consulta impede a injeção de SQL, uma das vulnerabilidades mais comuns e perigosas.
Reutilização: Declarações preparadas podem ser reutilizadas com diferentes conjuntos de dados, aumentando a eficiência.
Leitura: Torna o código mais legível e mantém a estrutura SQL clara.
OBSERVAÇÕES IMPORTANTES:
Vale lembrar que os exemplos citados acima, são utilizadas apenas para uso didático. Cada desenvolvedor deve ser responsável em aplicar medidas de segurança para evitar ataques de injeção de SQL ou de outro tipo em seu sistema.
Nenhum comentário:
Postar um comentário