Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Von MySQL vorbereitete Anweisungen

Verwenden Sie PDO (PHP Data Objects) um sich mit Ihrer MySQL-Datenbank zu verbinden. Diese Methode stellt sicher, dass alle Datenbankeingaben immer als Textstrings behandelt werden und Sie niemals manuelle Escapezeichen setzen müssen.

Dies kombiniert mit der richtigen Verwendung von html_entities() zum Anzeigen von Daten von Ihre Datenbank ist eine solide und gute Möglichkeit, Ihre Seite vor Injektionen zu schützen. Ich verwende immer PDO, um alle meine Datenbankverbindungen in meinen Projekten zu handhaben.

Datenbankobjekt erstellen (und in diesem Fall eine bestimmte Zeichenkodierung erzwingen):

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();
}

Dann verwenden Sie es wie folgt:

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

oder

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

und mit Wildcards:

$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!";
}

Weiterlesen:

Wie kann ich die SQL-Injection in PHP verhindern?

Wann sollten vorbereitete Anweisungen *nicht* verwendet werden?

wie sicher sind PDO-vorbereitete Anweisungen

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