Php - mikor kell használni az idézeteket, dupla idézőjeleket és linkeket mysql-ben, a q-a kódot
Megpróbálom megtanulni a lekérdezések legegyszerűbb módját. Azt is megértem, mennyire fontos a következetesség. Eddig véletlenül egyetlen idézetet, dupla idézőjelet és linket használtam valódi gondolatok nélkül.
Ezenkívül a fenti példában vegye figyelembe, hogy a "táblázat", "col [n]" és "val [n]" változók lehetnek.
Mi ez a szabvány? Mit csinálsz?
A hasonló kérdésekre adott válaszokat itt körülbelül 20 percig olvastam, de úgy tűnik, hogy nincs végleges válasz erre a kérdésre.
A háttérképeket táblázat- és oszlopazonosítókhoz kell használni, de csak akkor, ha az azonosító egy fenntartott MySQL kulcsszó, vagy ha az azonosító egy korlátozott készleten kívül álló karaktereket vagy karaktereket tartalmaz (lásd alább). Gyakran ajánlott elkerülni a fenntartott kulcsszavak oszlopazonosítóként vagy táblázatokként történő használatát, ha lehetséges, a problémák feltüntetésének elkerülése érdekében.
Egyetlen idézőjelet kell használni a karakterláncértékekhez, például az értékek listájában (). A kettős idézőjeleket a MySQL támogatja a string értékekhez is, de az egyes idézőjeleket szélesebb körben elfogadják más RDBMS-ek, ezért kedves a kettős idézőjelek helyett egy idézőjelet használni.
Ezért a példa használatával megdupláznám a PHP karakterláncot, és használnám az "val1", "val2" értékű idézeteket. A NULL egy MySQL kulcsszó és egy speciális (nem) érték, ezért nincs rendezve.
Az RDBMS-hez kapcsolódó funkciókat (például a NOW () a MySQL-ben) nem szabad idézni, bár érveik ugyanazokat a szabályokat vagy idézési szabályokat követték, amelyeket már említenek.
Változó interpoláció
A változók hivatkozási sablonjai nem változnak, bár ha változókat szeretnénk közvetlenül egy stringbe interpolálni, akkor PHP-ben kétszer kell megadnunk. Csak győződjön meg róla, hogy megfelelően választotta ki az SQL változók használatát. (Ehelyett javasoljuk az elkészített utasításokat támogató API-t, mint az SQL injekció elleni védelmet).
Elkészített nyilatkozatok
Olyan karakterek, amelyek visszatérő hivatkozást adnak vissza az azonosítókban:
A MySQL dokumentáció szerint. akkor nem kell megadnia a háttérképet a következő karakterkészlet használatával:
ASCII: [0-9, az, AZ $ _] (latin latin betűk, 0-9, dollár, aláhúzás)
Használhat olyan karaktereket, amelyek nagyobbak, mint a táblázatok vagy oszlopok azonosítói, például a szóközök, de akkor meg kell adnia őket (vissza).
A MySQL-ben kétféle idézet létezik:
- 'A szöveges karakterek beillesztése
- `Az azonosítók, például az asztal és az oszlop nevek
És akkor van "ez a különleges eset, amely egyidejűleg használható az egyik fenti célhoz, az sql_mode szerver sql_mode-jától függően.
- Alapértelmezés szerint a "karakter" használható a szöveges karakterek fészkeléséhez,
- Az ANSI_QUOTES módban a karakter használható azonosítók csatolására is, `
A következő lekérdezés különböző eredményeket (vagy hibákat) eredményez az SQL módtól függően:
Az ANSI_QUOTES le van tiltva
A lekérdezés kiválaszt egy karakterláncot "oszlop", ahol az oszlop foo egyenlő a "bar"
Engedélyezett ANSI_QUOTES
A lekérdezés kiválasztja az oszlop oszlopát, ahol az oszlop foo értéke megegyezik az oszlop oszlopával
Mikor kell használni
- Javasoljuk, hogy ne használjon "úgy, hogy kódja ne függ az SQL módtól
- Mindig határozza meg az azonosítókat, mivel ez jó gyakorlat (meglehetősen kevés kérdés foglalkozik ezzel)
(Az SQL lekérdezés természete tekintetében jó válaszok vannak, de ez akkor is fontos lehet, ha új vagy a PHP-re.)
Talán fontos megjegyezni, hogy a PHP különbözõ módon kezeli az egyes és a kettõs idézeteket.
Egy idézőjellel rendelkező karakterláncok literálok és WYSIWYG vonalakat képviselnek. A kettős idézett karakterláncokat a PHP a lehetséges változóhelyettesítésre értelmezi (a PHP-hez való linkek nem pontosan a stringek, végrehajtják a parancsot a shell-ben, és visszaadják az eredményt).
A Backticks általában egy azonosítóra hivatkozik, és biztonságban is lehet tartani a fenntartott kulcsszavak véletlen használatától.
Itt a back tics segít a kiszolgálónak megérteni, hogy az adatbázis tartalmazza az adatbázis nevét, nem pedig az adatbázis-azonosítót.
Ugyanez megtehető az asztalnevek és a mezőnevek esetében is. Ez nagyon jó szokás, ha összekapcsolja az adatbázis azonosítóját visszacsatolással.
Nézze meg ezt a választ, ha többet szeretne megtudni a fordított eredményekről.
De az érték megadásához egyetlen vagy kettős idézetet kell használnia. Lássunk egy másik példát.
Itt szándékosan elfelejtettem a címemet1 idézőjelekkel ellátni. Most a szerver a címet1 az oszlop neve (azaz az azonosító) nevévé teszi. Tehát az értékének megadásához kettős vagy egyszeri árajánlatot kell használnia.
Most, ha dupla idézőjelet használsz PHP-ben, a $ val1 és a $ val2 változókat használod az értékek használatához, ezáltal létrehozva a helyes lekérdezést. mint
A sztring literálok a MySQL-ben és a PHP-ben ugyanazok.
A karakterlánc olyan egy vagy több idézőjelben ("") vagy dupla idézőjelben ("") található byte vagy karakterek sorozata.
Ezért, ha a karakterlánc tartalmaz egy idézőjelet, akkor a kettős idézőjelekkel idézheti a karakterláncot, vagy ha kettős idézőjeleket tartalmaz, akkor az egyes idézetekkel idézheti a stringet. De ha a karakterlánc egyszerre tartalmaz idézőjeleket és kettős idézőjeleket, akkor el kell kerülnie a stringet idézni.
Alapjában véve az SQL-karakterlánc értékére egy-egy idézetet használunk, ezért dupla idézőjeleket kell használnunk a PHP karakterláncra.
És használhat egy változót egy stringben, dupla idézőjelekkel:
De ha a $ val1 vagy a $ val2 egyetlen idézőjelet tartalmaz, akkor az SQL hibás lesz. Ezért el kell menekülnie abból, mielőtt az sql-ben kerülne felhasználásra; Ez az, amit a mysql_real_escape_string-nek neveznek. (Bár az előkészített nyilatkozat jobb.)
Alapvetően a MySQL-ben az ilyen típusú azonosítókat a lekérdezésekben használják. ”. és ().
`Egy táblázatot vagy egy táblázatot tartalmazó táblázatot használhat például, válasszon oszlopnevet a táblagépnévből ahol id = '2'
() A lekérdezés részeit egyszerűen csak csatolni kell, például az oszlopnév nevét a táblázatnévből, ahol (id = '2' és nem = 'férfi') vagy name = 'rakesh'.
A PHP és MySQL kombinációban a kettős idézőjelek és az egyes idézőjelek nagymértékben egyszerűsítik a lekérdezések készítésének idejét.
Tegyük fel, hogy közvetlen post változót használ a MySQL lekérdezésben, majd használja ezt így:
Ez a legjobb gyakorlat a PHP változók MySQL használatára.
Ha a cols táblák és értékek változók, akkor kétféleképpen lehet:
Dupla idézőjelekkel "" teljes lekérdezés:
Egy ajánlat "".
Használja a fordított kullancsokat `` `ha az oszlop / érték neve hasonló a MySQL biztonsági kulcsszavához.
Megjegyzés. Ha oszlopnevet ad meg egy táblanévvel, használja az ellentétes kullancsokat az alábbiak szerint:
`Table_name`. `column_name` <- Примечание: исключить. Со спины
Egyetlen idézőjelet kell használni a karakterláncértékekhez, például az értékek listájában ().
A backticks általában egy azonosítóra utalnak, és a fenntartott kulcsszavak véletlenszerű használata miatt is biztonságban lehetnek.
A PHP és a MySQL kombinációban a kettős idézőjelek és az egyes idézőjelek nagymértékben egyszerűsítik a lekérdezés időpontját.
Számos hasznos válasz volt, amelyek általában két ponttal zárultak.
- A BACKTICKS (`) az azonosító nevek körül kerül felhasználásra.
- QUOTES (') értékeket használunk az értékek körül.
És ahogy @MichaelBerkowski mondta
A háttérképeket táblázat- és oszlopazonosítókhoz kell használni, de csak akkor, ha az azonosító egy fenntartott MySQL kulcsszó, vagy ha az azonosító egy korlátozott készleten kívül álló karaktereket vagy karaktereket tartalmaz (lásd alább). Gyakran ajánlott elkerülni a fenntartott kulcsszavak oszlopazonosítóként vagy táblázatokként történő használatát, ha lehetséges, a problémák feltüntetésének elkerülése érdekében.
Van olyan eset, amikor az azonosító nem lehet fenntartott kulcsszó, vagy olyan szóközöket vagy karaktereket tartalmaz, amelyek kívül esnek a korlátozott készleten, de feltétlenül megkövetelik a hozzájuk kapcsolódó hivatkozásokat.
A 123E10 érvényes azonosító név, de érvényes INTEGER szóhasználat is.
[A részletek részletezése nélkül, hogyan szerezhet ilyen azonosító nevet] Tegyük fel, hogy létrehoznék egy 123456e6 nevű ideiglenes táblát.
Nem hibás a háttámlákon.
HIBA, ha nem használ visszahívásokat.
Azonban a 123451a6 a tökéletes azonosító név (háttérjelek nélkül).
Ez azért van, mert a 1234156e6 exponenciális szám.