Question

Je le code suivant:

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();
 }
}

Dois-je mysql_real_escape_string dans ce cas ou suis-je d'accord?

Était-ce utile?

La solution

Non, vous n'avez pas à la valeur échapper vous (pas de vous n'avez pas besoin de faire appel mysqli_real_escape_string) , lorsque vous utilisez les instructions préparées: le moteur DB va le faire lui-même <. / p>

(En fait, si vous appeliez mysql_real_escape_string et à l'aide des paramètres liés, vos cordes obtiendriez se sont échappés deux fois - ce qui ne serait pas grand: vous finiriez avec des personnages qui s'échappent partout ...)


En tant que sidenote: vos valeurs sont transmises sous forme d'entiers (comme indiqué par le 'ii') , de sorte que vous n'auriez pas à appeler mysql_real_escape_string, même si vous n'utilisez pas des déclarations préparées: comme son nom l'indique, ce fonction est utilisée pour échapper à ... chaînes.

Pour les entiers, j'utiliser généralement intval pour vous assurer que les données que j'injectent dans mes requêtes SQL sont vraiment entiers .

(Mais, comme vous utilisez des requêtes préparées, encore une fois, vous ne devez pas faire ce genre de vous échapper)

Autres conseils

Non, vous ne devez pas. La combinaison des deux résulterait en caractères d'échappement visibles montrant dans vos données.

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();    
 }    
}   
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top