sql >> Database >  >> RDS >> Mysql

MySQL-query uitfilteren in PHP

De enige manier is om op de juiste manier te ontsnappen aan door de gebruiker ingediende gegevens. Anderen hebben gewezen op enkele manieren om dit te doen.

Er is een andere manier:voorbereide verklaringen en plaatshouders. Voorbereide verklaringen worden ondersteund door elke moderne PHP-database-interface, inclusief mysqli en BOB .

Laten we PDO als demonstratie gebruiken. Laten we zeggen dat we wat gegevens in de tabel foo . wilden bijwerken ingediend door een gebruiker.

$sql = 'UPDATE foo SET bar = ? WHERE user_id = ?';
$sh = $db->prepare($sql);
$sh->execute(array( $_POST['bar'], $_SESSION['user_id'] ));

De variabelen in de array doorgegeven aan execute vervang de tijdelijke aanduidingen voor vraagtekens in de query. Wanneer dit gebeurt, worden ze automatisch ontsnapt en geciteerd . U hoeft ze niet handmatig te escapen om ze veilig in de database te plaatsen!

Aan de andere kant moet je ze nog steeds filteren op onverwachte inhoud, zoals HTML, Javascript, letters waar je cijfers verwacht, enz. Gegevens veilig maken om in de database in te voegen is slechts de helft van de strijd .



  1. SQL-syntaxisfout bij gebruik van UPDATE-databasequery

  2. Laravel 'kon stuurprogramma niet vinden (SQL:invoegen in...'

  3. Hoe kan ik een volledige lijst krijgen van alle query's die momenteel op mijn MySQL-server worden uitgevoerd?

  4. timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP kan op de ene machine nul zijn, maar niet op een andere?