2009-08-19 7 views
7

Nouveau pour cette nouvelle façon sécurisée de gérer SQL dans PHP et MySQL application web, pour sécuriser le code des injections SQL. Je prévois de commencer à utiliser mysqli avec PDO. Quelqu'un peut-il s'il vous plaît décrire comment dois-je commencer et procéder.requête paramétrée préparée avec PDO

Une référence à un article vous sera également utile.

Merci d'avance.

Répondre

11

Pour créer la connexion

try { 
    $db = new PDO("mysql:dbname=".DB_NAME.";host=".DB_HOST,DB_USER,DB_PWD); 
} catch (PDOException $e) { 
    die("Database Connection Failed: " . $e->getMessage()); 
} 

ensuite pour préparer une déclaration

$prep = $db->prepare("SELECT * FROM `users` WHERE userid = ':id'"); 

Comme vous pouvez le voir, vous l'étiquette de chaque paramètre que vous souhaitez en préfixant une chaîne avec « : ». Ensuite, tout ce que vous faites est de passer un tableau mappant le paramètre (: id) à la valeur lorsque vous exécutez.

if (!$prep->execute(array(":id" => $userinput))) { 
    $error = $prep->errorInfo(); 
    echo "Error: {$error[2]}"; // element 2 has the string text of the error 
} else { 
    while ($row = $prep->fetch(PDO::FETCH_ASSOC)) { // check the documentation for the other options here 
     // do stuff, $row is an associative array, the keys are the field names 
    } 
} 

Au lieu de PDO :: FETCH_ASSOC avec la fonction « chercher », il y a d'autres façons d'obtenir vos données. Vous pouvez utiliser fetchAll pour obtenir un tableau de TOUS les résultats en une fois au lieu de simplement aller ligne par ligne. Vous pouvez également obtenir le tableau d'informations sous la forme d'un tableau indexé 0 ou vous pouvez même extraire les résultats directement dans une instance de classe (si les noms des champs correspondent aux propriétés de la classe). PDO peut être trouvé ici: PHP.net PDO Manual

+0

Je crois que vous n'avez pas besoin des guillemets autour d'un espace réservé: '" SELECT * FROM \ 'users \' WHERE userid =: id "' –

Questions connexes