Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Select - przekazywanie nazwy tabeli przez zmienną
Forum PHP.pl > Forum > Bazy danych > MySQL
loko87
Witam,

dzisiaj rano miałem problem z poleceniem INSERT (http://forum.php.pl/index.php?showtopic=183061&st=0&gopid=894202&#entry894202), teraz czas na SELECT smile.gif
Mam nadzieje, że szybko naucze się sam wykrywać źródła problemów, bo póki co opornie mi to idzie. Ale w PHPie programuje dopiero kilka dni, więc brakuje mi doświadczenia... Ale udało mi sie skonfigurowac debuggera w NetBeansie, więc wykrywanie błędów idzie mi dużo lepiej: wklejam screena:



$nazwa_tabeli przekazywana jest podczas wywoływania funkcji (z poziomu programu, nie użytkownika). Próbowałem używania odwołania `'.$nazwa_tabeli.'`, `'.$nazwa_tabeli.'` oraz '.$nazwa_tabeli.'

Zawsze zwracano pustą odpowiedź.

EDIT: naturalnie tabela `klient` zawiera kilka rekordów.

EDIT2: błąd zwracany przez mysql_error:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''klient'' at line 1.

Zakładam, że chodzi o cudzysłowia? Stripslashes tu nie wystarczy?


  1. function select_table_records(Db_config $db_config, $nazwa_tabeli){
  2. //połączenie z bazą danych:
  3. $connection = @mysql_connect($db_config->get_databaseHost(), $db_config->get_databaseUser(), $db_config->get_databasePassword())
  4. or die('Brak połączenia z serwerem MySQL');
  5. $db = @mysql_select_db($db_config->get_databaseName(), $connection)
  6. or die('Nie mogę połączyć się z bazą danych');
  7.  
  8. //wyslanie zapytania select
  9. $nazwa_tabeli=stripslashes($nazwa_tabeli);
  10. $zapytanie = @mysql_query("SELECT * FROM '$nazwa_tabeli'");
  11. if($zapytanie) {
  12. return $zapytanie;
  13. } else {
  14. return false;
  15. }
  16. //usuniecie obiektu
  17. mysql_free_result($zapytanie);
  18. //zamkniecie połączenia
  19. mysql_close($connection);
  20. }


Dla scislosci - klasa klient (jak i inne będące odzwierciedleniami tabel) dziedziczy po klasie tabela, zawierającej tą operacja. Oczywiście zawsze mógłbym zaimplementować dla każdej klasy funkcje select bez przekazywania tego argumentu, ale chyba po to jest dziedziczenie, zeby unikać takich rozwiązań, prawda?

Dziękuje za pomoc w rozwiązaniu problemu.
barcisz
Nazwy tabeli nie umieszcza się w cudzysłowie.
loko87
Eh, ale głupi błąd smile.gif

Właśnie miałem pisać, że
  1. $query=sprintf("SELECT * FROM %s",mysql_real_escape_string($nazwa_tabeli));
  2. $zapytanie = @mysql_query($query);


zadziałało, a nie pomyslałem o zwykłym usunięciu ''. Prawdę mówiąc byłem przekonany, że '' są konieczne gdy wstawia się zmienną do zapytania tongue.gif

dziękuje za pomoc
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.