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

Mohu parametrizovat název tabulky v připraveném příkazu?

Krátká odpověď na vaši otázku je „ne“.

V nejpřísnějším smyslu, na úrovni databáze, připravené příkazy umožňují svázat parametry pouze pro bity "hodnot" příkazu SQL.

Jedním ze způsobů uvažování o tom je "věci, které lze nahradit při běhu příkazu, aniž by se změnil jeho význam". Název tabulky (jména) není jednou z těchto hodnot za běhu, protože určuje platnost samotného příkazu SQL (tj. jaké názvy sloupců jsou platné) a jeho změna v době provádění by potenciálně změnila, zda byl příkaz SQL platný.

Na mírně vyšší úrovni, a to i v databázových rozhraních, která spíše emulují substituci parametrů připraveného příkazu, než aby skutečně posílali připravené příkazy do databáze, jako je PDO, což by vám mohlo umožnit použít zástupný symbol kdekoli (protože zástupný symbol je nahrazen před odesláním do databáze v těchto systémech), hodnota zástupného symbolu tabulky by byl řetězec a jako takový uzavřený v SQL odeslaném do databáze, takže SELECT * FROM ? s mytable protože param by ve skutečnosti skončil odesláním SELECT * FROM 'mytable' do databáze, což je neplatné SQL.

Nejlepším řešením je pokračovat s

SELECT * FROM {$mytable}

ale vy naprosto by měl mít bílý seznam tabulek, se kterými nejprve porovnáte, pokud $mytable pochází z uživatelského vstupu.




  1. Udělte oprávnění na úrovni tabulky v SQL Server

  2. Jak nakonfigurovat databázovou poštu na serveru SQL Server

  3. Použití podmíněného příkazu UPDATE v SQL

  4. Datový model autoservisu