2014-05-08 3 views
-2

J'ai obtenu ce simple code du moteur de recherche, mais voler ne peut l'empêcher de mes SQL Injectionsmysqli_real_escape_string ne fonctionnera pas?

$sql = mysqli_real_escape_string($searchengine,$sql); 

ne fonctionne pas ou je l'utilise mal ... ce que je fais mal?

<?php 
mysql_connect("localhost", "root", ""); 
mysql_select_db("searchengine"); 

$sql = mysql_query("SELECT * FROM searchengine WHERE pagecontent LIKE '%$_GET[term]%' LIMIT 0,$_GET[results]"); 

while($ser = mysql_fetch_array($sql)) { echo "<h2><a href='$ser[pageurl]'>$ser[pageurl]</a></h2>"; } 


?> 
+4

Choisissez une extension et respectez-la. Vous ne pouvez pas les mélanger. (Et le choix est plutôt clair à mon humble avis.) –

+0

que feriez-vous? – user3615487

+0

voir la réponse ci-dessous. – Latheesan

Répondre

1

Le mysqli_real_escape_string fait partie du module mysqli. Vous mélangez et n'utilisez pas la fonction correctement.

Voici comment vous le faites correctement:

mysql_connect("localhost", "root", ""); 
mysql_select_db("searchengine"); 

$sql = mysql_query(sprintf(
    "SELECT * FROM searchengine WHERE pagecontent LIKE '%s' LIMIT 0,%d", 
     '%'. mysql_real_escape_string($_GET['term']) .'%', 
     mysql_real_escape_string($_GET['results'])) 
); 

while($ser = mysql_fetch_array($sql)) { 
    echo "<h2><a href='$ser[pageurl]'>$ser[pageurl]</a></h2>"; 
} 

// don't forget to close connection 
mysql_close(); 

post-scriptum mysql_* est officiellement obsolète. S'il vous plaît regarder en utilisant PDO ou MySQLi bibliothèque.

+0

Votre méthode échouera si le paramètre 'term' arrive avec une lettre reconnue par' sprintf'. Les signes '%' littéraux devraient être doublés dans cette fonction. –

+0

... Bien sûr, c'est un peu idiot d'échapper au paramètre 'term', mais pas le paramètre' results' ... –

+0

@NiettheDarkAbsol le sprintf va lancer le '$ _GET ['results']' comme un chiffre/nombre à cause du détenteur du lieu de format '% d' - donc pas besoin d'échapper à cela. – Latheesan