Tutorial PHP

PHP INÍCIO Introdução ao PHP Instalação do PHP Sintaxe PHP Comentários PHP Variáveis ​​PHP PHP Eco/Impressão Tipos de dados PHP Strings PHP Números PHP Matemática PHP Constantes PHP Operadores PHP PHP If...Else...Elseif Chave PHP Loops PHP Funções PHP Matrizes PHP PHP Superglobais PHP RegEx

Formulários PHP

Manipulação de formulários PHP Validação de formulário PHP Formulário PHP obrigatório URL/e-mail do formulário PHP Formulário PHP completo

PHP Avançado

Data e hora do PHP Incluir PHP Manipulação de arquivos PHP Arquivo PHP Abrir/Ler Arquivo PHP Criar/Gravar Upload de arquivo PHP Cookies PHP Sessões PHP Filtros PHP Filtros PHP Avançados Funções de retorno de chamada do PHP PHP JSON Exceções do PHP

PHP OOP

PHP O que é POO Classes/objetos PHP Construtor PHP Destruidor PHP Modificadores de acesso PHP Herança PHP Constantes PHP Classes abstratas PHP Interfaces PHP Características PHP Métodos estáticos PHP Propriedades estáticas do PHP Namespaces PHP Iteráveis ​​PHP

Banco de dados MySQL

Banco de dados MySQL MySQL Connect MySQL Criar banco de dados MySQL Criar Tabela Dados de inserção do MySQL MySQL Obter Último ID MySQL Inserir Múltiplo Preparado para MySQL Dados de seleção do MySQL MySQL Onde MySQL Ordenar por Dados de exclusão do MySQL Dados de atualização do MySQL Dados de limite do MySQL

PHP XML

Analisadores XML PHP Analisador PHP SimpleXML PHP SimpleXML - Obter PHP XML Expatriado PHP XML DOM

PHP - AJAX

Introdução AJAX PHP AJAX Banco de dados AJAX XML AJAX Pesquisa em tempo real AJAX Enquete AJAX

Exemplos PHP

Exemplos PHP Compilador PHP Teste PHP Exercícios PHP Certificado PHP

Referência PHP

Visão geral do PHP Matriz PHP Calendário PHP Data do PHP Diretório PHP Erro PHP Exceção PHP Sistema de arquivos PHP Filtro PHP PHP FTP PHP JSON Palavras-chave PHP PHP Libxml Correio PHP Matemática PHP PHP Diversos PHP MySQLi Rede PHP Controle de saída PHP PHP RegEx PHP SimpleXML Fluxo PHP String PHP Manipulação de variáveis ​​PHP Analisador XML PHP PHP Zip Fusos horários PHP

Declarações Preparadas PHP MySQL


As instruções preparadas são muito úteis contra injeções de SQL.


Declarações Preparadas e Parâmetros Vinculados

Uma instrução preparada é um recurso usado para executar as mesmas instruções SQL (ou semelhantes) repetidamente com alta eficiência.

Declarações preparadas funcionam basicamente assim:

  1. Preparar: Um modelo de instrução SQL é criado e enviado ao banco de dados. Certos valores são deixados não especificados, chamados de parâmetros (rotulados como "?"). Exemplo: INSERT INTO MyGuests VALUES(?, ?, ?)
  2. O banco de dados analisa, compila e executa a otimização de consulta no modelo de instrução SQL e armazena o resultado sem executá-lo
  3. Execute: posteriormente, o aplicativo vincula os valores aos parâmetros e o banco de dados executa a instrução. A aplicação pode executar a instrução quantas vezes quiser com valores diferentes

Em comparação com a execução direta de instruções SQL, as instruções preparadas têm três vantagens principais:

  • As instruções preparadas reduzem o tempo de análise, pois a preparação na consulta é feita apenas uma vez (embora a instrução seja executada várias vezes)
  • Os parâmetros vinculados minimizam a largura de banda para o servidor, pois você precisa enviar apenas os parâmetros de cada vez, e não toda a consulta
  • As instruções preparadas são muito úteis contra injeções de SQL, porque os valores de parâmetro, que são transmitidos posteriormente usando um protocolo diferente, não precisam ser escapados corretamente. Se o modelo de instrução original não for derivado de entrada externa, a injeção de SQL não poderá ocorrer.

Declarações Preparadas no MySQLi

O exemplo a seguir usa instruções preparadas e parâmetros vinculados no MySQLi:

Exemplo (MySQLi com instruções preparadas)

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

// prepare and bind
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);

// set parameters and execute
$firstname = "John";
$lastname = "Doe";
$email = "[email protected]";
$stmt->execute();

$firstname = "Mary";
$lastname = "Moe";
$email = "[email protected]";
$stmt->execute();

$firstname = "Julie";
$lastname = "Dooley";
$email = "[email protected]";
$stmt->execute();

echo "New records created successfully";

$stmt->close();
$conn->close();
?>

Linhas de código para explicar do exemplo acima:

"INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)"

Em nosso SQL, inserimos um ponto de interrogação (?) onde queremos substituir em um valor inteiro, string, double ou blob.

Então, dê uma olhada na função bind_param():

$stmt->bind_param("sss", $firstname, $lastname, $email);

Essa função vincula os parâmetros à consulta SQL e informa ao banco de dados quais são os parâmetros. O argumento "sss" lista os tipos de dados que são os parâmetros. O caractere s diz ao mysql que o parâmetro é uma string.

O argumento pode ser um dos quatro tipos:

  • e - inteiro
  • d - duplo
  • s - cadeia
  • b - BLOB

Devemos ter um desses para cada parâmetro.

Ao dizer ao mysql que tipo de dados esperar, minimizamos o risco de injeções de SQL.

Nota: Se quisermos inserir quaisquer dados de fontes externas (como entrada do usuário), é muito importante que os dados sejam higienizados e validados.



Declarações Preparadas em DOP

O exemplo a seguir usa instruções preparadas e parâmetros vinculados no PDO:

Exemplo (DOP com Declarações Preparadas)

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";

try {
  $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
  // set the PDO error mode to exception
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  // prepare sql and bind parameters
  $stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email)
  VALUES (:firstname, :lastname, :email)");
  $stmt->bindParam(':firstname', $firstname);
  $stmt->bindParam(':lastname', $lastname);
  $stmt->bindParam(':email', $email);

  // insert a row
  $firstname = "John";
  $lastname = "Doe";
  $email = "[email protected]";
  $stmt->execute();

  // insert another row
  $firstname = "Mary";
  $lastname = "Moe";
  $email = "[email protected]";
  $stmt->execute();

  // insert another row
  $firstname = "Julie";
  $lastname = "Dooley";
  $email = "[email protected]";
  $stmt->execute();

  echo "New records created successfully";
} catch(PDOException $e) {
  echo "Error: " . $e->getMessage();
}
$conn = null;
?>