Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Select - przekazywanie nazwy tabeli przez zmienną
loko87
post 28.08.2011, 18:03:51
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 28.08.2011

Ostrzeżenie: (0%)
-----


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.

Ten post edytował loko87 28.08.2011, 18:15:44
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
barcisz
post 28.08.2011, 18:19:48
Post #2





Grupa: Zarejestrowani
Postów: 41
Pomógł: 12
Dołączył: 8.04.2011

Ostrzeżenie: (0%)
-----


Nazwy tabeli nie umieszcza się w cudzysłowie.

Ten post edytował barcisz 28.08.2011, 18:20:01
Go to the top of the page
+Quote Post
loko87
post 28.08.2011, 18:24:20
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 28.08.2011

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 06:18