sql >> Databáze >  >> RDS >> Mysql

Měli byste použít připravené výpisy pouze pro jejich únik?

Rozdíl je považován za zanedbatelný.

Nicméně je třeba rozlišovat nativní připravená prohlášení z obecné myšlenky připraveného prohlášení.

První z nich je jen forma spouštění dotazů podporovaná většinou DBMS, vysvětleno zde . Jeho použití může být zpochybněno.
To druhé je obecná myšlenka nahrazení skutečných dat zástupným symbolem, což znamená další zpracování nahrazených dat. Je široce používán v programování, dobře známý printf() funkce je příkladem. A tento druhý přístup je třeba VŽDY použít ke spuštění dotazu na databázi , bez ohledu na to, zda je podložena nativními připravenými prohlášeními nebo ne. Protože:

  • připravený příkaz umožňuje správné formátování (nebo manipulaci) nevyhnutelným .
  • připravený příkaz provádí správné formátování (nebo manipulaci) na jediném správném místě - těsně před provedením dotazu, ne někde jinde, takže naše bezpečnost nebude spoléhat na tak nespolehlivé zdroje jako
    • nějaká „magická“ funkce PHP, která data spíše kazí, než aby je zajistila.
    • dobrá vůle jednoho (nebo více) programátorů, kteří se mohou rozhodnout naformátovat (či neformátovat) naši proměnnou někde v průběhu programu. To je velmi důležitý bod.
  • připravený příkaz má vliv na samotnou hodnotu, která se zadává do dotazu, ale ne na zdrojovou proměnnou, která zůstává nedotčena a lze ji použít v dalším kódu (který má být odeslán e-mailem nebo zobrazen na obrazovce).
  • připravený příkaz může výrazně zkrátit kód aplikace a provést veškeré formátování za scénou (*pouze pokud to ovladač dovolí).

Takže i když uvažujete o tom, že nepoužíváte nativní připravené příkazy (což je docela v pořádku), musíte své dotazy vždy vytvářet pomocí zástupných symbolů namísto skutečných dat. Pro tento účel můžete použít CHOP , který funguje přesně tak, jak je popsáno výše – ve výchozím nastavení pouze emulovat připravuje , znamená, že se z připraveného dotazu a dat vytvoří běžný SQL dotaz a poté se spustí proti databázi.

PDO však postrádá podporu pro mnoho důležitých datových typů, jako je identifikátor nebo pole – takže nemůžete vždy používat zástupné symboly, a proto je vkládání docela možné. Naštěstí safeMysql má zástupné symboly pro každý datový typ a umožňuje vám bezpečně spouštět dotazy.



  1. Jak ukončím skript v SQLPlus, když dojde k chybě, a vrátím se na výzvu SQLPlus, aniž bych musel SQLPlus odpojit nebo ukončit?

  2. Jak mohu odeslat e-mail ze spouštěče PostgreSQL?

  3. MySQL vrátí maximální hodnotu nebo null, pokud jeden sloupec nemá žádnou hodnotu

  4. Vložení SQLite