Mysql: problem z zapytaniemw skrypcie rejestracyjnym


(Szarex2 0) #1

Witam.

Piszę sobie skrypt rejestracji. Plik który otrzymuje dane z formularza rejestracyjnego wygląda tak:


(Grzelix) #2

Poradziłbym najpierw sprawdzić zapytanie w konsoli to wyeliminuje nam jedną niewiadomą bo teraz nie wiadomo czy to sql'ka jest błędna czy błąd jest w kodzie php (obstawiam to drugie ale na razie nie widzę jeszcze dokładnie co)


(Szarex2 0) #3

Skopiowałem to co wyrzuca poniższa instrukcja do konsoli w w programie MySQL Query Browser:

echo "query: $query; [/code]

Wykonuje się prawidłowo.

Co ciekawe nawet jeżeli w zmiennej [i]$query[/i] umieszczę takie trywialne zapytanie jak:
[code]SELECT * FROM users;

Skrypt pokazuje nieprawidłowe zapytanie. A w MySQL Query Browser działa idealnie.

(Grzelix) #4

Ja nie jestem specjalistą od php i prawdę mówiąc nigdy nie programowałem w czystym php. Ale ostatnio dość intesywnie pisze w Frameworku Symfony gdzie poznałem dość dobrze php. Wstęp jest dla tego bo sprawdzałem twój kod pod Symfony tylko tam są troszkę inne zasady pisania. Tutaj masz osobną funkcje która sprawdza połączenie w takim przypadku u mnie też nie działa (ale to może być winna stylu Symfony) nie mniej jeśli zadeklaruję kod tak żę zmienna $db_lnk jest inicjowana w tej samej funkcji gdzie potem następuje połączenie i wykonanie zapytania to jest ok.


(Szarex2 0) #5

Patent żeby połączenie z serwerem i wybór bazy umieścić w osobnej funkcji poznałem w książce z której uczyłem się PHP. Tam funkcja DBConnect jest dodatkowo umieszczana w osobnym pliku, który jest includowany w każdym skrypcie wykonującym operacje na bazie. Tutaj funkcję DBConnect umieściłem w tym samym pliku, żeby było wszystko w jednym skrypcie dla prostoty testowania. Łatwiej skopiować i testować taki kod.

Ale w moim skrypcie akurat z tą funkcją nie ma problemu - zwraca zawtość true - połączenie z bazą i wybór tabeli jest prawidłowy. Tylko zapytanie nie chce się wykonać.


(Sitemaster) #6

oj, oj, oj. koszmarek :?

  • może lepiej zmień książkę.

  • ta funkcja DBConnect() jest mało praktyczna, nie jest skalowalna w żadnym stopniu i będziesz przywiązany do tej jednej tabeli tylko.

  • jeżeli już byś koniecznie chciał to w takiej formie, to:

a) albo w tej funkcji zmienną $db_lnk zadeklaruj jako globalną

b) albo zamiast zwracać prawdę, zwracaj identyfikator połączenia ...czyli zamiast return true; daj return $db_lnk;

3.

if($reslut=mysql_query($query,$db_lnk)) { echo "zapytanie prawidłowe
"; }

nie zadziała teraz, bo zmienna $db_link mnie istnieje!

-będzie istniała dopiero w przypadku pkt2. a)

-albo w przypadku pkt2. b)

...gdy if(DBConnect()) zmienisz na if($db_lnk=DBConnect())


(Szarex2 0) #7

OK. Zrezygnowałem na razie z funkcji i napisałem to tak: