PHP MySQL preparadas demonstrações
declarações preparadas para evitar MySQL injecção é muito útil.
instruções preparadas e parâmetros encadernados
declarações preparadas para a execução de uma pluralidade de a mesma instrução SQL, e executar de forma mais eficiente.
Obras de declarações preparadas como se segue:
O pré-tratamento: Criar uma declaração de modelo SQL enviada para o banco de dados. O valor do parâmetro reservados marca "?". Por exemplo:
INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
análise de banco de dados, compilar, executar a otimização de consulta template declarações SQL, e armazena o resultado não é emitido.
Execução: Finalmente, os valores dos parâmetros passados para a ligação (marca "?") A aplicação, banco de dados executa as instruções. As aplicações podem ser executadas muitas vezes, se o valor do parâmetro não é o mesmo.
Em comparação com a execução direta de instruções SQL, instrução preparada tem duas vantagens principais:
declarações preparadas reduz drasticamente o tempo de análise, apenas uma consulta (embora as instruções são executadas).
parâmetros vinculados a reduzir a largura de banda do servidor, você só precisa enviar uma consulta de parâmetro em vez de toda a instrução.
declarações preparadas contra injeção de SQL é muito útil, porque depois de usar diferentes protocolos para enviar valores de parâmetros para garantir a legitimidade dos dados.
MySQLi preparado declarações
O exemplo a seguir usa a MySQLi em uma declaração preparada, e ligar os parâmetros correspondentes:
Exemplos (MySQLi usando instruções preparadas)
$ Servername = "localhost";
$ Username = "username";
$ Password = "password";
$ Dbname = "myDB";
// Criar uma ligação
$ Conn = new mysqli ($ servername, $ username, $ password, $ dbname);
// Teste de conexão
if ($ conn-> connect_error) {
Die ( "A ligação falhou:" $ conn-> connect_error.);
}
// Pré-tratamento e vinculativa
$ Stmt = $ conn-> prepare ( "INSERT INTO MyGuests (nome, sobrenome, e-mail) VALUES (,,) ???");
$ Stmt-> bind_param ( "sss", $ firstname, $ sobrenome, $ email);
// Definir parâmetros e executar
$ Nome = "John";
$ Lastname = "Doe";
$ Mail = "[email protected]";
$ Stmt-> execute ();
$ Nome = "Maria";
$ Lastname = "Moe";
$ Mail = "[email protected]";
$ Stmt-> execute ();
$ Nome = "Julie";
$ Lastname = "Dooley";
$ Mail = "[email protected]";
$ Stmt-> execute ();
echo "O novo registro é inserido com sucesso";
$ Stmt-> close ();
$ Conn-> close ();
?>
Analisar cada linha de código nos seguintes exemplos:
Em algumas instruções SQL, usamos o ponto de interrogação (?), Aqui podemos substituir o ponto de interrogação integer, string, de precisão dupla de ponto flutuante e valores booleanos.
Em seguida, vamos olhar para bind_param () função:
Os parâmetros SQL função de ligação, e dizer o valor do parâmetro de banco de dados. "sss" tipos de dados de parâmetros de processamento de coluna para os restantes parâmetros. s personagem conta a base de dados que o parâmetro.
Há quatro tipos de parâmetros:
- I - inteiro (inteiro)
- d - double (duplo ponto flutuante de precisão)
- s - string (string)
- b - BLOB (binary large object: grandes objetos binários)
Cada parâmetro é necessário para especificar o tipo.
O parâmetro tipo de dados informa ao banco de dados, você pode reduzir o risco de injeção de SQL.
Nota: Se você deseja inserir dados adicionais (de entrada do usuário), a verificação dos dados é muito importante. |
DOP preparado declarações em
Os exemplos a seguir usamos declarações preparadas em DOP e parâmetros de ligação:
Exemplos (DOP usando instruções preparadas)
$ Servername = "localhost";
$ Username = "username";
$ Password = "password";
$ Dbname = "myDBPDO";
try {
$ Conn = new PDO ( "mysql: host = $ servername; dbname = $ dbname", $ username, $ password);
// Definir a excepção modo de erro PDO
$ Conn-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION);
// parâmetros de vinculação pré-tratamento e SQL
$ Stmt = $ conn-> prepare ( "INSERT INTO MyGuests (nome, sobrenome, e-mail)
VALUES (: firstname ,: sobrenome ,: e-mail) ");
$ Stmt-> bindParam ( ': firstname', $ firstname);
$ Stmt-> bindParam ( ': sobrenome', $ sobrenome);
$ Stmt-> bindParam ( ': e-mail', $ email);
// Inserir linha
$ Nome = "John";
$ Lastname = "Doe";
$ Mail = "[email protected]";
$ Stmt-> execute ();
// Inserir outra linha
$ Nome = "Maria";
$ Lastname = "Moe";
$ Mail = "[email protected]";
$ Stmt-> execute ();
// Inserir outra linha
$ Nome = "Julie";
$ Lastname = "Dooley";
$ Mail = "[email protected]";
$ Stmt-> execute ();
echo "O novo registro é inserido com sucesso";
}
catch (PDOException $ e)
{
.. Eco $ sql "<br>" $ e-> getMessage ();
}
$ Conn = null;
?>