sql >> Base de Datos >  >> RDS >> Mysql

Declaraciones preparadas de MySQL

Utilice PDO (objetos de datos de PHP) para conectarse a su base de datos MySQL. Este método se asegurará de que todas las entradas de la base de datos siempre se traten como cadenas de texto y nunca tendrá que realizar ningún escape manual.

Esto combinado con el uso adecuado de html_entities() para mostrar datos de su base de datos es una forma sólida y buena de proteger su página de la inyección. Siempre uso PDO para manejar todas mis conexiones de base de datos en mis proyectos.

Cree un objeto de base de datos (y en este caso imponga una determinada codificación de caracteres):

try {
    $db = new PDO("mysql:host=[hostname];dbname=[database]",'[username]','[password]');
    $db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES utf8");
    $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    $db->exec('SET NAMES utf8');
} catch (PDOException $e) {
    echo $e->getMessage();
}

Entonces úsalo así:

$id = 1;
$q = $db->prepare('SELECT * FROM Table WHERE id = ?');
$q->execute(array($id));
$row = $q->fetch();
echo $row['Column_1'];

o

$q = $db->prepare('UPDATE Table SET Column_1 = ?, Column_2 = ? WHERE id = ?');
$q->execute(array('Value for Column_1','Value for Column_2',$id));

y con comodines:

$search = 'John';
$q = $db->prepare('SELECT * FROM Table WHERE Column_1 LIKE ?');
$q->execute(array('%'.$search.'%'));
$num = $q->rowCount();
if ($num > 0) {
  while ($row = $q->fetch()) {
    echo $row['Column_1'];
  }
} else {
  echo "No hits!";
}

Leer más:

¿Cómo puedo evitar la inyección de SQL en PHP?

¿Cuándo *no* usar declaraciones preparadas?

qué tan seguras son las declaraciones preparadas de PDO

http://php.net/manual/en/book.pdo.php