2009-08-19 21 views
7

Nuevo en esta forma nueva y segura de manejar SQL en PHP y aplicación web basada en MySql, para proteger el código de las inyecciones de SQL. Estoy planeando comenzar a usar mysqli con PDO. ¿Alguien puede describir cómo debo comenzar y proceder?preparado consulta parametrizada con PDO

Cualquier referencia a cualquier artículo también será útil.

Gracias de antemano.

Respuesta

11

para crear la conexión

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

continuación para preparar una declaración

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

Como se puede ver, se etiqueta cada parámetro desea anteponiendo cualquier cadena con ':'. Entonces, todo lo que haces es pasar una matriz mapeando el parámetro (: id) al valor cuando lo ejecutas.

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 
    } 
} 

En lugar de PDO :: FETCH_ASSOC con la función "ir a buscar", hay varias otras maneras de obtener sus datos. Puede usar fetchAll para obtener una matriz de TODOS los resultados a la vez en lugar de ir fila por fila. O puede obtener la matriz de información como una matriz indexada 0, o incluso puede obtener los resultados directamente en una instancia de clase (si los nombres de campo se alinean con las propiedades de la clase).

Toda la documentación de PDO se puede encontrar aquí: PHP.net PDO Manual

+0

Creo que no necesita las comillas alrededor de un marcador de posición: '" SELECCIONAR * FROM \ 'users \' WHERE userid =: id "' –

Cuestiones relacionadas