sql >> Databasteknik >  >> RDS >> Mysql

MySQL-förberedda uttalanden

Använd PDO (PHP Data Objects) för att ansluta till din MySQL-databas. Denna metod kommer att se till att all databasinmatning alltid kommer att behandlas som textsträngar och att du aldrig behöver göra någon manuell escape.

Detta kombinerat med korrekt användning av html_entities() för att visa data från din databas är ett solidt och bra sätt att skydda din sida från injektion. Jag använder alltid PDO för att hantera alla mina databasanslutningar i mina projekt.

Skapa databasobjekt (och i det här fallet framtvinga en viss teckenkodning):

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

Använd det sedan så här:

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

eller

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

och med jokertecken:

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

Läs mer:

Hur kan jag förhindra SQL-injektion i PHP?

När *inte* ska man använda förberedda uttalanden?

hur säkra är SUB-förberedda uttalanden

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



  1. ROWIDTOCHAR() Funktion i Oracle

  2. Vikten av att välja rätt Azure VM-storlek

  3. Basera databasmodeller i verkligheten:A Blogger's Challenge

  4. SQLite aggregerade funktioner