Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie do bazy - pobiera dane w phpMyAdmin, nie pobiera przez inny skrypt
Forum PHP.pl > Forum > Bazy danych > MySQL
wojckr
Witam, mam taki oto problem:
Jest zapytanie SQL SELECT generowane przez skrypt PHP. Wysyłam to zapytanie do bazy funkcją mysql_query(). Mysql_num_rows() zwraca 0 rekordów; mysql_error() żadnego błędu - zapytanie powinno zwrócić dokładnie 1 rekord, a zwraca 0.
Dokładnie to samo zapytanie wygenerowane przez skrypt PHP wklejam w phpMyAdmin i phpMyAdmin jakoś pobiera 1 rekord z danymi (tak powinno być, bo dane są).

I teraz pytanie: dlaczego przez mój skrypt PHP to samo zapytanie pobiera 0 rekordów, a przez phpMyAdmin 1 rekord? (przecież phpMyAdmin to też skrypt PHP). Wszystko dzieje się na tym samym serwerze.

Z góry dzięki za odpowiedź.
erix
A masz na pewno te same dane do połączenia?
blooregard
Zapoznaj się z tym tematem:
Temat: Jak poprawnie zada pytanie

To Ci nieco rozjaśni sytuację.
wojckr
Nie wiem czy dobrze Cię rozumiem. W moim skrypcie łączę się podając serwer, użytkownika i hasło. PhpMyAdmin był zainstalowany nie przeze mnie, nie wiem jakie są dane do połączenia. Jakie to może mieć znaczenie? Skrypt wykonuje wiele innych zapytań do bazy z powodzeniem.
blooregard
Cytat
Nie wiem czy dobrze Cię rozumiem.

Chyba nie.

- stosuj var_dump
- wyechuj zapytanie
- włącz raportowanie błędów

i sam dojdziesz do tego, co jest nie tak.
wojckr
Cytat(blooregard @ 8.04.2010, 17:28:35 ) *
Chyba nie.

- stosuj var_dump
- wyechuj zapytanie
- włącz raportowanie błędów

i sam dojdziesz do tego, co jest nie tak.


Robiłem już to,
* error reporting E_ALL (brak błędów)
* wyechowane zapytanie (wklejałem je potem w phpMyAdmin i pobierało tam 1 rekord),
* sprawdzałem przez var_dump($o) odpowiedź (="resource(22) of type (mysql result)").
* mysql_num_rows($o)=0.
* mysql_fetch_assoc($o)=false.

Co może mieć wpływ na to, że to samo zapytanie w skrypcie pobiera 0 rekordów (i żadnych błędów), a przez phpMyAdmin pobiera 1 rekord (czyli tyle ile powinien)?
erix
Jakie masz zapytanie? Więcej szczegółów, bo to trochę za mało...
wojckr
Zapytanie wygląda tak:

  1. SELECT *
  2. FROM users
  3. WHERE
  4. users.login='abc'
  5. AND users.email='abc@example.com'
  6. AND SUBSTRING(MD5(CONCAT(users.b1,UNIX_TIMESTAMP(users.b2))),1,10) = '900cf37b94'


Tworzone jest tak:
  1. $user=$_GET['user'];
  2. $email=$_GET['email'];
  3. $token=$_GET['token'];
  4.  
  5. if (usernameOk($user) and emailOk($email) and preg_match('/\A[a-zA-Z\d]{10}\z/',$token)) {
  6. $sql='
  7. SELECT *
  8. FROM users
  9. WHERE
  10. users.login=\''.$user.'\'
  11. AND users.email=\''.$email.'\'
  12. AND SUBSTRING(MD5(CONCAT(users.b1,UNIX_TIMESTAMP(users.b2))),1,10) = \''.$token.'\'';
  13. $odp=mysql_query($sql);
  14. //...tutaj sprawdzanie $odp...
  15. }


Kod jest taki jak widać, chociaż mam wrażenie, że to nie zależy od tego jak wygląda zapytanie, ewentualnie może od tego, że wartości do zmiennych pobierane są z URLa(?).

--------------------
Problem znaleziony:
UNIX_TIMESTAMP(data) - tu leży problem, ta funkcja określa ilość sekund od 1970 UTC dla argumentu data, potem zmniejsza lub zwiększa tą ilość sekund, w zależności od zmiennej @@time_zone, która akurat w moim skrypcie jest ustawiana w czasie zimowym na UTC+1, a w letnim na UTC+2, natomiast w phpMyAdmin wartość @@time_zone jest inna i ogólnie tu leży problem.
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.