sql >> Database teknologi >  >> RDS >> Mysql

Skal du kun bruge forberedte udsagn til at undslippe dem?

Forskellen anses for at være ubetydelig.

Ikke desto mindre er man nødt til at skelne mellem indfødte udarbejdede udsagn fra den generelle idé om en forberedt redegørelse.

Førstnævnte er kun en form for kørende forespørgsler, der understøttes af det meste af DBMS, forklaret her . Dets brug kan stilles spørgsmålstegn ved.
Sidstnævnte er en generel idé om at erstatte faktiske data med en pladsholder, hvilket indebærer yderligere behandling af de erstattede data. Det er meget brugt i programmering, en velkendt printf() funktion er et eksempel. Og denne sidstnævnte tilgang skal ALTID bruges til at køre en forespørgsel mod en database , uanset om det er understøttet af indfødte udarbejdede erklæringer eller ej. Fordi:

  • forberedt erklæring gør korrekt formatering (eller håndtering) uundgåelig .
  • forberedt erklæring udfører korrekt formatering (eller håndtering) på det eneste rigtige sted - lige før udførelse af forespørgsler, ikke et andet sted, så vores sikkerhed er ikke afhængig af sådanne upålidelige kilder som
    • en eller anden 'magisk' funktion i PHP, som hellere ødelægger dataene end at gøre dem sikre.
    • en (eller flere) programmørers gode vilje, som kan beslutte at formatere (eller ikke formatere) vores variabel et eller andet sted i programflowet. Det er det, der er af stor betydning.
  • forberedt erklæring påvirker selve værdien, der går ind i forespørgslen, men ikke kildevariablen, som forbliver intakt og kan bruges i den yderligere kode (som sendes via e-mail eller vises på skærmen).
  • forberedt erklæring kan gøre applikationskoden dramatisk kortere, idet den udfører al formateringen bag kulisserne (*kun hvis føreren tillader det).

Så selvom du overvejer ikke at bruge native forberedte udsagn (hvilket er helt okay), skal du altid oprette dine forespørgsler ved hjælp af pladsholdere i stedet for de faktiske data. Til dette formål kan du bruge PDO , som fungerer nøjagtigt som beskrevet ovenfor - som standard er det bare emulate prepares , betyder, at almindelig SQL-forespørgsel oprettes ud fra forberedte forespørgsler og data og derefter køres mod databasen.

PDO mangler dog understøttelse af mange vigtige datatyper, såsom identifikator eller et array - dermed gør det dig ude af stand til altid at bruge pladsholdere og gør dermed en indsprøjtning ganske mulig. Heldigvis er safeMysql har pladsholdere for hver datatype og giver dig mulighed for at køre forespørgsler sikkert.



  1. MySQL-opdatering fra en tabel til en anden med tilstand, der ikke virker?

  2. Flytning af Wordpress-websted til Docker:Fejl ved etablering af DB-forbindelse

  3. adgang nægtet, når du forsøger at oprette forbindelse til mysql ved hjælp af tomcat-datakilde

  4. Hvordan fejlretter jeg fejl, der ikke har nogen fejlmeddelelse?