Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Declarações Preparadas do MySQL


Use PDO (PHP Data Objects) para se conectar ao seu banco de dados MySQL. Esse método garantirá que todas as entradas do banco de dados sejam sempre tratadas como strings de texto e você nunca precisará fazer nenhum escape manual.

Isso combinado com o uso adequado de html_entities() para exibir dados de seu banco de dados é uma maneira sólida e boa de proteger sua página contra injeção. Eu sempre uso o PDO para lidar com todas as minhas conexões de banco de dados em meus projetos.

Crie um objeto de banco de dados (e neste caso aplique uma certa codificação 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();
}

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

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

e com curingas:
$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!";
}

Consulte Mais informação:

Como posso evitar injeção de SQL no PHP?

Quando *não* usar declarações preparadas?

quão seguras são as declarações preparadas pelo DOP

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