Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] No database selected
Forum PHP.pl > Forum > Przedszkole
iro88
Witam,
sporo czasu poświęciłem na szukanie rozwiązania swojego problemu i próbowałem z nim sam walczyć, ale bezskutecznie.
Nie wiem dlaczego podczas zapytania do bazy UPDATE (czasem SELECT) wywala mi błąd "No database selected". Przy wszystkich innych rodzajach zapytań nie ma tego problemu, a łączę się z bazą w identyczny sposób. Poniżej przedstawiam kod:

Struktura bazy danych:
Kod
id | adres | name | desc | onoff

Funkcja:
  1. function setKategory($id=null,$dane) {
  2. $nazwa = $dane['nazwa'];
  3. $adres = $dane['adres'];
  4. $opis = $dane['opis'];
  5. mysql_connect(DB_HOST, DB_USERNAME, DB_PASSWORD)or die();
  6. mysql_select_db(DB_NAME)or die();
  7. mysql_query("SET NAMES utf8");
  8. //jesli podano $id do funkcji to aktualizuj
  9. if($id != null){
  10. $temp = $this->getKategory(null,$id);
  11. if($adres == $temp->adres) {
  12. // poniższe zapytanie wywala błąd
  13. mysql_query("UPDATE kategorie SET name = '$nazwa', adres = '$adres', desc = '$opis', onoff='$temp->onoff' WHERE id = '$id'");
  14. // poniższe zapytanie wywala błąd
  15. } elseif (!mysql_num_rows(mysql_query("SELECT * FROM kategorie WHERE adres = '$adres'")or die(mysql_error()))) {
  16. // poniższe zapytanie wywala błąd
  17. mysql_query("UPDATE kategorie SET name = '$nazwa', adres = '$adres', desc = '$opis', onoff='$temp->onoff' WHERE id = '$id'");
  18. }
  19. //jesli nie, dodaj jako nowy wpis
  20. } elseif(!mysql_num_rows(mysql_query("SELECT * FROM kategorie WHERE adres = '$adres'"))) {
  21. mysql_query("INSERT INTO kategorie VALUES ('', '$nazwa', '$adres', '$opis', '0')");
  22. }
  23. header('Location: '.parent::hrefLink('admin', 'kategorie', ''));
  24. }


Jeszcze raz podkreślę, że dodawanie nowego rekordu działa bezbłędnie, tylko aktualizacja sprawia problemy. Dodatkowo zaznaczając w samym zapytaniu bazę poprzez taką konstrukcję:
  1. mysql_query("SELECT * FROM test.kategorie WHERE adres = '$adres'")
  2. //otrzymuję błąd: SELECT command denied to user ''@'localhost' for table 'kategorie'

Działam na lokalu więc username i password to 'root' i to jest bankówa, wiec o co chodzi?
Błagam o pomoc, bo straciłem na to już wiele czasu i nadal nic.

EDIT: pozbyłem się TABów z kodu zastępując wcięcia 2 spacjami, aby było przejrzyściej.
phpowiec84
Sprawdź czy użytkownik ma dostęp do operacji na bazie (uprawnienia)
iro88
Ma, w końcu to root. Dla pewności oprócz globalnych praw do każdej bazy dałem mu również pełen dostęp do tej konkretnej, ale to nic nie zmienia.

Błagam chociaż o podsunięcie tropu, bo wszelkie pomysły na to co może być nie tak mi się wyczerpały.
Kostek.88
Hmm... laczenie z baza masz w funkcji i odwolujesz sie do stalych, ktore masz - zakladam - w osobnym pliku i gdzies go includujesz na gorze. Moze po prostu z wnetrza funkcji nie masz dostepu do tych stalych? Sprobuj na probe wrzucic stale do funkcji.
iro88
Tak, w osobnym pliku mam zdefiniowane te stałe. Próba przeniesienia ich do funkcji niestety nic nie pomogła. Poza tym nie widać żadnych błędów w kodzie, prawda? Pytam, bo od przyglądania się już sam nie wiem czy, może czegoś nie przeoczyłem.
Zaczynam się zastanawiać, czy to przypadkiem nie jest wina samego serwera MYSQL, próbowałem go reinstalować ale nie pomogło. Może coś w ustawieniach?
Kostek.88
Jak dla mnie to powinno byc np.

  1. mysql_query("UPDATE kategorie SET name = '" . $nazwa . "', adres = '" . $adres . "', desc = '" . $opis . "', onoff='" . $temp->onoff . "' WHERE id = " . $id);

zamiast
  1. mysql_query("UPDATE kategorie SET name = '$nazwa', adres = '$adres', desc = '$opis', onoff='$temp->onoff' WHERE id = '$id'");


Jakego serwera uzywasz?
iro88
Zmiana zapytania nie pomogła, ale nie jestem pewny co do tej linijki:
  1. elseif (!mysql_num_rows(mysql_query("SELECT * FROM kategorie WHERE adres = '$adres'")or die(mysql_error()))) {

przesunąłem chwilowo zamknięcie nawiasu:
  1. elseif (!mysql_num_rows(mysql_query("SELECT * FROM kategorie WHERE adres = '$adres'"))or die(mysql_error())) {

i teraz wywala błąd:
Kod
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in...

Nie wiem czy dobrze zrobiłem ale zawsze to coś innego, bo to "No database selected" już mnie męczyło, coś pokombinuje z tym jeszcze.

EDIT: MySQL: 5.5.9, używam pakietu MAMP.
Kostek.88
Nawias zle przesunales, poza tym wywala blad jeszcze w innej linijce. Mozesz dac kod tych stalych i fragment include? Cos mi tu naprawde nie pasuje, poza tym masz blad tylko w zapytaniach UPDATE, jak sadze.

Poza tym... zrob test w konsoli. Zaloguj sie na uzytkownika tego co na stronie ustawiasz. Wpisz po kolei te polecenia: UPDATE, INSERT etc. Wtedy dowiesz sie, czy na pewno Ty jako root masz miec do tego uprawnienia. To dziwne, ze nie dziala UPDATE, czasem SELECT, a przy innych typach tak.
iro88
Poprawiłem nawias.

Ogólnie kod jest bardzo obszerny więc Ciężko go wrzucić całego.
  1. //index.php includuje poprzez require_once(); init.php, który to includuje również poprzez require_once(); settings.php i inne pliki do działania aplikacji (Router i główny kontroler). Raczej tam błędu nie ma, bo to mój autorski silnik sprawdzony już przy innych projektach, więc wszędzie by był problem z zapytaniami.
  2.  
  3. //settings.php - includowany na samym początku aplikacji niezależnie od tego jakie metody się wykonuje, zawsze jest.
  4. <?php
  5. define('APP_PATH', $_SERVER['DOCUMENT_ROOT'].'/');
  6. define('SMARTY_DIR', 'app/lib/smarty/libs/' );
  7.  
  8. define('HOST', '/');
  9.  
  10. define('DB_HOST', 'localhost');
  11. define('DB_NAME', 'test');
  12. define('DB_USERNAME', 'root');
  13. define('DB_PASSWORD', 'root');
  14. ?>

Tu bym raczej błędów nie szukał, ale wrzucam.

Niżej kod z innego projektu (z innej beczki), który działa w pełni, oparty o ten sam silnik:
  1. function setWpis($id=null,$dane) {
  2. $tytul = $dane['tytul'];
  3. $tresc = $dane['tresc'];
  4. $autor = $dane['autor'];
  5. $meta_tytul = $dane['meta_tytul'];
  6. $meta_opis = $dane['meta_opis'];
  7. $data = date("Y-m-d",mktime(0,0,0,(int)$dane['miesiac'],(int)$dane['dzien'],(int)$dane['rok']));
  8. $data_mod = date("Y-m-d H:i:s", time());
  9. mysql_connect(DB_HOST, DB_USERNAME, DB_PASSWORD)or die();
  10. mysql_select_db(DB_NAME)or die();
  11. mysql_query("SET NAMES utf8");
  12. mysql_query("SET COLLATION utf8_general_ci");
  13. if($id != null){
  14. mysql_query("UPDATE wpisy SET tytul = '$tytul',tresc = '$tresc', autor = '$autor', meta_tytul = '$meta_tytul', meta_opis = '$meta_opis', data = '$data', data_mod = '$data_mod' WHERE id = '$id'");
  15. } else {
  16. mysql_query("INSERT INTO wpisy VALUES ('', '$tytul', '$tresc', '$autor', '$meta_tytul', '$meta_opis', '$data', '$data_mod', '0')");
  17. }
  18. }
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.