declarações preparadas – são necessárias

As statistics preparadas adicionam uma quantidade significativa de código … ainda continuo ouvindo menções para usá-los … o valor é adicionado passando de 1 linha de código para cerca de 6? Isso é simplesmente para proteger contra a injeção sql?

Similar postar aqui .

php.net em declarações preparadas aqui

As declarações preparadas oferecem excelente proteção contra a injeção SQL.

Além da proteção contra injeção SQL, as instruções preparadas oferecem carga reduzida no servidor de database quando a mesma consulta é executada várias vezes, como em um loop INSERT . A declaração é compilada apenas uma vez pelo RDBMS ao invés de precisar ser compilada cada vez como seria em uma chamada mysql_query() .

APIs diferentes requerem quantidades variables ​​de código para executar uma declaração preparada. Acho que o PDO pode ser um pouco menos detalhado do que o MySQLi, se, por exemplo, sua situação permitir o uso da binding implícita de parâmetros dentro da chamada execute() . Isso funciona apenas, se todos os seus parâmetros podem ser avaliados como cordas.

 // PDO implicit binding example: // Not many lines of code if the situation allows for it $stmt = $pdo->prepare("SELECT * FROM tbl WHERE col1=? AND col2=? AND col3=?"); $stmt->execute(array($val1, $val2, $val3)); 

Não é justo dizer que as declarações preparadas causam 1 linha de código para explodir para 6. Na verdade, para usar uma, você precisa apenas de 2 linhas: uma para preparar a declaração e outra para vincular os parâmetros. Qualquer outro código que você escreva (executar consulta, vincular resultados, obter resultados, etc.) também seria necessário mesmo se você não usasse declarações preparadas.

Então, em essência, estamos falando sobre o que uma linha de código adicional o compra. Ele compra duas coisas:

  1. Proteção contra injeções sql (que também inclui proteção contra consultas malformadas não maliciosas, por exemplo, evitando que sua consulta seja interrompida se uma variável injetada contiver uma única citação)
  2. Possíveis benefícios de desempenho, se você terminar executando a mesma declaração preparada para diferentes valores injetados.

O ponto # 2 nem sempre pode ser aplicado, mas considere que o ponto # 1 também economiza o problema necessário para escaping manualmente dos valores a serem injetados em sua consulta. Este seria um código adicional (mesmo se você puder fazê-lo em linha na mesma linha) que você precisaria escrever se não estiver usando declarações preparadas.

Como vejo as coisas, podemos concluir que, com declarações preparadas, você acaba obtendo segurança e possivelmente o desempenho gratuitamente .