Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Za żadne skarby nie chce przyjąć zapytania
Forum PHP.pl > Forum > Przedszkole
evolucja
  1. $query = mysql_query("SELECT `id`,`activated` FROM `ll_users` WHERE `username` = 'a' AND `activation_code` = 'b';");

Próbowałem na różne sposoby. W tej postaci nie przyjmie i koniec.
Błąd:
  1. 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 '' at line 1


W PMA przechodzi bez problemu.


Pierwszy raz się z czymś takim spotkałem..
outsider
moze sprobuj bez srednika w zapytaniu ?
darophp
Racja:
Kod
$query = mysql_query("SELECT `id`,`activated` FROM `ll_users` WHERE `username` = 'a' AND `activation_code` = 'b'");
melkorm
Strzelam że w skrypcie PHP masz błąd i zapewne masz składnie podobną do :
  1. $query = mysql_query("SELECT `id`,`activated` FROM `ll_users` WHERE `username` = '$username' AND `activation_code` = '$code';");


Zrób przed zapytaniem var_dump'a na obie zmienne, a zobaczysz że jedna z nich jest pusta smile.gif

Bo o tym prawi błąd że zapytanie wygląda mniej więcej tak:
  1. SELECT `id`,`activated` FROM `ll_users` WHERE `username` = '' AND `activation_code` = ''


Edit:
Up
Treść zapytania może zawierać średnik. Zresztą nawet gdyby nie mogło treść błędu byłaby zupełnie inna.
evolucja
Cytat(*OuTSideR* @ 21.07.2010, 17:33:36 ) *
moze sprobuj bez srednika w zapytaniu ?

Jak bez średnika? Co to za różnica? Zresztą, dawanie średnika po każdym zapytaniu jest dobrym nawykiem smile.gif

Cytat(darophp @ 21.07.2010, 18:13:11 ) *
Racja:
Kod
$query = mysql_query("SELECT `id`,`activated` FROM `ll_users` WHERE `username` = 'a' AND `activation_code` = 'b'");

Że co? smile.gif


Cytat(melkorm @ 21.07.2010, 18:15:18 ) *
Strzelam że w skrypcie PHP masz błąd i zapewne masz składnie podobną do :
  1. $query = mysql_query("SELECT `id`,`activated` FROM `ll_users` WHERE `username` = '$username' AND `activation_code` = '$code';");


Zrób przed zapytaniem var_dump'a na obie zmienne, a zobaczysz że jedna z nich jest pusta smile.gif

Bo o tym prawi błąd że zapytanie wygląda mneijwięcej tak:
  1. SELECT `id`,`activated` FROM `ll_users` WHERE `username` = '' AND `activation_code` = ''

A gdzie ty tam zmienne jakieś widzisz? Zresztą, nawet gdyby były zmienne i gdzieś popełnił bym przedszkolny błąd nadpisując je lub kasując, to przecież zapytanie które podałeś w drugim przykładzie, rzekomo, że takie wywala błąd jest przecież jak najbardziej poprawne smile.gif

Doprawdy, tyle projektów w życiu wykonałem z czymś takim się pierwszy raz spotykam. Dodam, że bez części WHERE zapytanie przechodzi bez problemu.
melkorm
Cytat
A gdzie ty tam zmienne jakieś widzisz?


Jeżeli w PMA wykonuje się Tobie dobrze to założyłem że masz błąd w skrypcie smile.gif Może go pokażesz?

Cytat
Doprawdy, tyle projektów w życiu wykonałem z czymś takim się pierwszy raz spotykam. Dodam, że bez części WHERE zapytanie przechodzi bez problemu.


Nie wątpię w Twoje umiejętności, odpisujemy bo chcemy pomóc, a Ty napisałeś bo szukasz pomocy, ale rzeczą ludzką jest się mylić i już tyle razy poprawiałem ludziom i współpracownikom literówki że jestem pewien że żadna magia nie wywołała tego błędu, tylko błąd w zapytaniu w skrypcie PHP.
evolucja
Cytat(melkorm @ 21.07.2010, 18:25:19 ) *
Nie wątpię w Twoje umiejętności, odpisujemy bo chcemy pomóc, a Ty napisałeś bo szukasz pomocy, ale rzeczą ludzką jest się mylić i już tyle razy poprawiałem ludziom i współpracownikom literówki że jestem pewien że żadna magia nie wywołała tego błędu, tylko błąd w zapytaniu w skrypcie PHP.

To oczywiste winksmiley.jpg Łapcie skrypt, a raczej samą funkcję:
  1. public function UserActivate($u, $c) {
  2. global $validation_error;
  3. $u = BasicClean($u);
  4. $c = BasicClean($c);
  5. $query = query("SELECT `id`,`activated` FROM `ll_users` WHERE `username` = 'a' AND `activation_code` = 'b'");
  6. $result = mysql_fetch_array($query);
  7. if(count($result) != 1) {
  8. $validation_error['activation']['e'] = true;
  9. } elseif($result['activated'] == 1) {
  10. $validation_error['activation']['aa'] = true;
  11. } else {
  12. $query = query("UPDATE `ll_users` SET `activated` = 1 WHERE `id` = ".$result['id'].";");
  13. $validation_error['activation']['a'] = true;
  14. $validation_error['activation']['u'] = $u;
  15. }
  16. }
melkorm
  1. error_reportin( E_ALL + E_STRICT );


  1. $query = query("UPDATE `ll_users` SET `activated` = 1 WHERE `id` = ".$result['id'].";");


Nie znajduje rekordu, $result['id'] jest puste i sypie błędem smile.gif

  1. var_dump($result);
evolucja
Żadnych błędów więcej po za tym z pierwszego postu.

Czemu teraz uczepiłeś się nie tego zapytania u którego jest problem? happy.gif Problem jest z 5 linijką, nie 12.
melkorm
Bo nie widzę innego błędu? a treść Twojego błędu dotyczy zapytania, ale nie ma napisane którego.

Chociaż sprawdzasz to co piszemy? Bo masz definitywnie błąd logiczny.
evolucja
Cytat(melkorm @ 21.07.2010, 18:52:46 ) *
Bo nie widzę innego błędu? a treść Twojego błędu dotyczy zapytania, ale nie ma napisane którego.

Już w pierwszym poście podałem przecież o które zapytanie chodzi winksmiley.jpg
Cytat
Chociaż sprawdzasz to co piszemy? Bo masz definitywnie błąd logiczny.

Tylko, że nic konkretnego nie powiedzieliście. Pomimo tego, że byłem na 100% pewny, że średnik może być to sprawdziłem to.
reporting_all dodałem, zresztą napisałem iż żadnego nowego błędu nie było.

Problem rozwiązany. Brakowało apostrofów w drugim zapytaniu. Dziwne, sądziłem, że dla pól typu INT apostrofy nie są potrzebne a wręcz dodatkowo obciążają bazę która musi zamienić STRING na INT.
melkorm
Nic konkretnego? Hm, spójrzmy, zapytanie masz dobre bo wpisałeś je z PALCA (tak jak wkleiłeś skrypt PHP) więc to zapytanie się wykonuje na 100%.

Mówię że masz błąd logiczny w warunku i moim zdaniem na 99% jest tam błąd, przecież spójrz :
1. Pierwsze zapytanie jest dobre bo jest), chyba że testujesz ze zmiennymi a nam dla świętego spokoju dałeś ze statycznymi ... .
2. Zakładam że select nie znajduje Tobie tego rekordu.
3. Warunek przechodzi do else i update sypie błędem, bo sypnie na pewno gdy $result będzie pusty ... .

I to by się zgadzało dlatego to jest moja diagnoza, niczego więcej Tobie nie powiem bo nie ma tu nic więcej do mówienia ponieważ pod jakąś zmienną nie ma wartości dlatego jest taki komunikat błędu, w dodatku zapytanie:
  1. SELECT `id`,`activated` FROM `ll_users` WHERE `username` = '' AND `activation_code` = '';

jest poprawne (pomyłka w poście wyżej gdzie twierdziłem że nie jest, zapomniałem o apostrofach).
ale zapytanie :
  1. UPDATE `ll_users` SET `activated` = 1 WHERE `id` = ;


Już nie jest, i tylko w tym miejscu może wystąpić błąd składni MySql'a gdy nie znajduje rekordu i ta wartość nie istnieje, lub jest pusta.

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.