PDO - PHP-dataobjekter er et databaseadgangslag, der giver en ensartet metode til adgang til flere databaser.
Det tager ikke højde for databasespecifik syntaks, men det kan tillade, at processen med at skifte databaser og platforme er ret smertefri, blot ved at skifte forbindelsesstrengen i mange tilfælde.
Forberedte udsagn/parametriserede forespørgsler er tilstrækkelige til at forhindre første-ordens indsprøjtning på det udsagn. Hvis du bruger umarkeret dynamisk SQL et andet sted i din applikation, er du stadig sårbar over for andenordens injektion.
Anden-ordens indsprøjtning betyder, at data er blevet cyklet gennem databasen én gang, før de er inkluderet i en forespørgsel, og det er meget sværere at hente. AFAIK, du ser næsten aldrig rigtige andenordens angreb, da det normalt er nemmere at social-engineere dig ind.
PDO er en smule langsommere end mysql
_*. Men den har stor bærbarhed. PDO giver en enkelt grænseflade på tværs af flere databaser. Det betyder, at du kan bruge flere DB uden at bruge mysql_query til mysql, mssql_query til SQL Server osv. Bare brug noget som $db->query("INSERT INTO...")
altid. Uanset hvilken databasedriver du bruger.
Så til større eller bærbare projekter er PDO at foretrække. Selv Zend Framework bruger PDO.
SQL-injektion
SQL-injektion
SQL-injektion er en teknik, hvor ondsindede brugere kan injicere SQL-kommandoer i en SQL-sætning via websideinput.
Injicerede SQL-kommandoer kan ændre SQL-sætningen og kompromittere sikkerheden i en webapplikation.
Er PDO-forberedte sætninger tilstrækkelige til at forhindre SQL-injektion?
Det korte svar er NEJ, PDO-forberedelser vil ikke forsvare dig mod alle mulige SQL-injektionsangreb. Angreb eksempel
Hvordan bruger man PDO?
Et eksempel:
$stmt = $dbh->prepare("SELECT * FROM tables WHERE names = :name");
$stmt->execute(array(':name' => $name));
Referencer
- http:/ /code.tutsplus.com/tutorials/pdo-vs-mysqli-which-should-you-use--net-24059
- http://code.tutsplus.com/tutorials/why-you-should-be-using-phps-pdo-for-database-access--net-12059
- Er BOB forberedte erklæringer tilstrækkeligt til at forhindre SQL-injektion?
- http://php.net/manual/en/book.pdo. php