Pergunta

Eu tenho o seguinte código:

function dbPublish($status)
{
 global $dbcon, $dbtable;

 if(isset($_GET['itemId']))
 {
  $sqlQuery = 'UPDATE ' . $dbtable . ' SET active = ? WHERE id = ?';
  $stmt = $dbcon->prepare($sqlQuery);
  $stmt->bind_param('ii', $status, $_GET['itemId']);
  $stmt->execute();
  $stmt->close();
 }
}

Eu preciso mysql_real_escape_string neste caso, ou sou eu ok?

Foi útil?

Solução

Não, você não tem que escapar valor a si mesmo (i.é.não, você não precisa chamar mysqli_real_escape_string), quando você estiver usando instruções preparadas :o mecanismo de banco de dados vai fazer isso sozinho.

(Na verdade, se você estivesse ligando mysql_real_escape_string e usando parâmetros dependentes, as cadeias teria escapado duas vezes -- o que não seria grande :você acabar com a fuga de caracteres em todo lugar...)


Como uma nota :seus valores são passados como números inteiros (como indicado pelo 'ii'), para que você não tem que chamar mysql_real_escape_string, mesmo se você não estivesse usando instruções preparadas :como o seu nome indica, esta função é usada para escapar...cadeias de caracteres.

Para inteiros, eu geralmente só uso intval para se certificar de que os dados que eu injetar no meu consultas SQL realmente são números inteiros.

(Mas, como você está usando consultas preparadas, mais uma vez, você não precisa fazer esse tipo de escapar de si mesmo)

Outras dicas

Não, você não deve. A combinação dos dois resultaria em caracteres de fuga visíveis aparecendo em seus dados.

function dbPublish($status)    
{    
 global $dbcon, $dbtable;    

 if(isset($_GET['itemId']))    
 {    
  $sqlQuery = 'UPDATE ' . $dbtable . ' SET active = ? WHERE id = ?';    
  $stmt = $dbcon->prepare($sqlQuery);    
  $stmt->bind_param('ii', $status, $_GET['itemId']);    
  $stmt->execute();    
  $stmt->close();    
 }    
}   
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top