sql >> Databáze >  >> RDS >> Mysql

Prevence proti vkládání MySQL

Použijte připravená prohlášení

Nejprve odešlou verzi dotazu se zástupnými symboly pro data. Dotaz je ověřen a připraven. V případě úspěchu můžete odeslat hodnoty, které databáze bezpečně vloží do připraveného dotazu.

Existují tři možnosti:

Rozšíření MySQLi

$stmt = $mysli->prepare('INSERT INTO costumer (costumer_ID,  first_name, last_name, birth_date, adress,  city, state, postal_code, country, phone, email_client,username, password, Credit_Card, Credit_CardType) 
                         VALUES 
                         (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?');

$stmt->bindParam('issssssssssssss', $_POST['costumer_ID'], ..., $_POST['Credit_CardType']);
$stmt->execute();

Rozšíření PDO

// use native prepared statements if supported
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

$stmt = $pdo->prepare('INSERT INTO costumer (costumer_ID,  first_name, last_name, birth_date, adress,  city, state, postal_code, country, phone, email_client,username, password, Credit_Card, Credit_CardType) 
                       VALUES 
                       (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?');

$stmt->bindParam(1, $_POST['costumer_ID'], PDO::PARAM_INT);
...
$stmt->bindParam(15, $_POST['Credit_CardType']);

$stmt->execute();

Nezpracované dotazy prostřednictvím libovolného rozšíření

Nebudu uvádět příklad, protože další dvě metody jsou mnohem lepší.



  1. Jak TIME() funguje v MariaDB

  2. Jak mít dynamické SQL v MySQL uložené procedury

  3. Vytváření dotazu mysql pro počítání konkrétních dat pod stejnou tabulkou/řádkem

  4. Nalezení volných bloků času v mysql a php?