Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Instrukcja przygotowania MySql - czy można sparametryzować nazwę kolumny lub nazwę funkcji?

nie możesz Sparametryzuj nazwę kolumny/tabeli/funkcji/alias. Jak, PREPARE Instrukcja zezwala na użycie jako parametrów tylko części „wartości” zapytania SQL. Nazwa/alias funkcji/tabeli/kolumny są używane do określenia poprawności instrukcji SQL; i dlatego nie można ich zmienić podczas wykonywania w czasie wykonywania. Zmiana go w czasie wykonywania potencjalnie zmieniłaby poprawność instrukcji SQL.

Możesz myśleć o tym jako o kompilacji kodu; dlatego kompilator musi znać wszystkie nazwy funkcji/klas itp., aby utworzyć poprawny plik wykonywalny (tak, możemy tworzyć klasy dynamiczne, ale to jest rzadkie ). Z drugiej strony, możemy zmienić „wartości” wejściowe do programu, ale ogólnie nie zmienić operacje, które mają być wykonane na danych wejściowych.

Ponadto serwer MySQL traktowałby parametry jako literały i stosował wokół nich cudzysłowy przed użyciem ich w wykonywaniu zapytania.

Teraz, w twoim przypadku, nadal możesz użyć nazwy funkcji jako parametru dla procedury składowanej i wygenerować ciąg zapytania przy użyciu tego. Ale nie możesz użyć go jako parametru dla samego zapytania.

delimiter $$
create procedure test(in func varchar(20), in col varchar(20))
  begin

    set @c = col;

    -- use concat function to generate the query string using func parameter
    set @sql = concat('select ', func, '(?) from table');

    -- prepare the statement
    prepare stmt from @sql;

    -- execute
    execute x using @c;

    -- don't forget to deallocate the prepared statement
    deallocate prepare stmt;
  end$$
delimiter ;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Użycie mysql z addslashes()

  2. Zapytanie SQL, aby sprawdzić typ produktu w WooCommerce

  3. mysql przechowywanie danych i wydajność zapytań z php

  4. Kompatybilność MySQL z MacOS Sierra

  5. Zapytanie wykonane dwukrotnie (przez błąd) w Javie z niepożądanymi wartościami