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

Czy mogę sparametryzować nazwę tabeli w przygotowanym zestawieniu?

Krótka odpowiedź na Twoje pytanie brzmi „nie”.

W najściślejszym sensie, na poziomie bazy danych, przygotowane instrukcje pozwalają na powiązanie parametrów tylko dla bitów „wartości” instrukcji SQL.

Jednym ze sposobów myślenia o tym jest "rzeczy, które można zastąpić podczas wykonywania instrukcji bez zmiany jej znaczenia". Nazwa(y) tabeli nie jest jedną z tych wartości w czasie wykonywania, ponieważ określa ona ważność samej instrukcji SQL (tj. jakie nazwy kolumn są poprawne), a zmiana jej w czasie wykonywania może potencjalnie zmienić poprawność instrukcji SQL.

Na nieco wyższym poziomie, nawet w interfejsach baz danych, które emulują podstawianie parametrów przygotowanych instrukcji, zamiast faktycznie wysyłać gotowe instrukcje do bazy danych, takie jak PDO, co mogłoby pozwolić na użycie symbolu zastępczego w dowolnym miejscu (ponieważ symbol zastępczy jest zastępowany przed wysłaniem do bazy danych w tych systemach), wartość symbolu zastępczego tabeli byłaby ciągiem i jako taka byłaby zawarta w zapytaniu SQL wysyłanym do bazy danych, więc SELECT * FROM ? z mytable ponieważ parametr faktycznie zakończyłby się wysłaniem SELECT * FROM 'mytable' do bazy danych, co jest nieprawidłowym SQL.

Najlepiej po prostu kontynuować

SELECT * FROM {$mytable}

ale ty absolutnie powinien mieć białą listę tabel, które najpierw sprawdzasz, jeśli ten $mytable pochodzi z danych wejściowych użytkownika.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP — wygląda na to, że w Twojej instalacji PHP brakuje rozszerzenia MySQL wymaganego przez WordPress

  2. Błąd krytyczny:Nieprzechwycony błąd:Wywołanie niezdefiniowanej funkcji mysql_connect()

  3. JSON_CONTAINS() Przykłady w MySQL

  4. Jak dynamicznie korzystać z wielu baz danych dla jednego modelu w CakePHP?

  5. Zmiana hasła root MySQL