sql >> Database >  >> RDS >> Mysql

Moet je voorbereide verklaringen alleen gebruiken voor hun ontsnapping?

Het verschil wordt als verwaarloosbaar beschouwd.

Desalniettemin moet men onderscheid maken tussen native opgestelde verklaringen van het algemene idee van een voorbereide verklaring.

De eerste is slechts een vorm van het uitvoeren van query's die wordt ondersteund door de meeste DBMS, uitgelegd hier . Het gebruik ervan kan in twijfel worden getrokken.
Dit laatste is een algemeen idee van het vervangen van feitelijke gegevens door een tijdelijke aanduiding, wat verdere verwerking van de vervangen gegevens inhoudt. Het wordt veel gebruikt bij het programmeren, een bekende printf() functie is een voorbeeld. En deze laatste benadering moet ALTIJD worden gebruikt om een ​​query op een database uit te voeren , ongeacht of het wordt ondersteund door native voorbereide verklaringen of niet. Omdat:

  • voorbereide verklaring maakt juiste opmaak (of behandeling) onvermijdelijk .
  • voorbereide verklaring zorgt voor de juiste opmaak (of verwerking) op de enige juiste plaats - vlak voor de uitvoering van de query, niet ergens anders, dus onze veiligheid is niet afhankelijk van onbetrouwbare bronnen zoals
    • een of andere 'magische' PHP-functie die de gegevens eerder bederft dan ze veilig maakt.
    • goede wil van een (of meerdere) programmeurs, die kunnen besluiten om onze variabele ergens in de programmastroom te formatteren (of niet te formatteren). Dat is het punt van groot belang.
  • voorbereide instructie heeft invloed op de waarde die in de query wordt opgenomen, maar niet op de bronvariabele, die intact blijft en kan worden gebruikt in de verdere code (te verzenden via e-mail of op het scherm te tonen).
  • voorbereide instructie kan de applicatiecode aanzienlijk korter maken, waarbij alle opmaak achter de schermen wordt uitgevoerd (*alleen als de bestuurder dit toestaat).

Dus zelfs als u overweegt geen native voorbereide instructies te gebruiken (wat best oké is), moet u uw query's altijd maken met behulp van tijdelijke aanduidingen in plaats van de daadwerkelijke gegevens. Hiervoor kunt u BOB gebruiken , die precies werkt zoals hierboven beschreven - standaard is het gewoon het emuleren van voorbereidingen , betekent dat een gewone SQL-query wordt gemaakt uit voorbereide query's en gegevens, en vervolgens wordt uitgevoerd tegen de database.

PDO heeft echter geen ondersteuning voor veel belangrijke gegevenstypen, zoals identifier of een array - waardoor u niet altijd tijdelijke aanduidingen kunt gebruiken en dus een injectie heel goed mogelijk maakt. Gelukkig, safeMysql heeft tijdelijke aanduidingen voor elk gegevenstype en stelt u in staat om zoekopdrachten veilig uit te voeren.



  1. Hoe krijg ik beschikbare data met reserveringen?

  2. Gedenormaliseerde databasetabellen bijwerken

  3. Een door komma's gescheiden waarde groeperen op algemene gegevens

  4. gegevens invoegen in mysql-database met behulp van php