Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: brak odpowiedzi z zapytanie
Forum PHP.pl > Forum > Bazy danych > MySQL
Chrom
Witam,
mam mieszkania o numerach liczbowych ale także takie jak 12A; 15a ;15b
mam bazę danych:

  1. CREATE TABLE `users` (
  2. `id` mediumint(6) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `haslo` varchar(32) collate utf8_polish_ci NOT NULL,
  4. `bud` varchar(12) collate utf8_polish_ci NOT NULL DEFAULT '0',
  5. `lokal` varchar(6) collate utf8_polish_ci NOT NULL DEFAULT '0',
  6. UNIQUE KEY `id` (`id`)
  7. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci PACK_KEYS=0 AUTO_INCREMENT=7418 ;
  8. $result = @mysql_query($sql, ) OR die("brak odpowiedzi z zapytania");



  1. $sql = "SELECT * FROM `users` WHERE bud='$adres' && lokal='$lokal' && haslo='$haslomd5' ";


ja wybieram same numery liczbowe wszystko jest ok ale jak z dodatkiem liter już nie.
Czy ktoś może pomóc w rozwiązaniu tego problemu.
nevt
Nie wiem czy to przyczyna (może podasz jakiś komunikat błędu?) ale łańcuchy w MySQL ujmujemy w apostrofy a nie w cudzysłowy, czyli 'napis' a nie "napis".

Popraw, może pomoże ?smile.gif
Pozdrawiam.
Chrom
Hm, apostrofy zmieniałem i dlatego przekopiowałem takie ale to nic nie daje mysql_error nic nie znajduje po prostu mimo że rekord jest nie wybiera go a na liczbach inne rekordy wybiera.
nevt
a co robi ten przecinek po $sql?: @mysql_query($sql, )
według mnie jest błąd składni a @ powoduje,ze zostaje zignorowany - czyli jakby tej linijki nie było....

sprawdź.
Chrom
sprawdziłem za przecinkiem jest zmienna $polaczenie ale jej nie wpisałem sorki, jednak problem dalej istnieje przecież nie traktuję zmiennej jako liczby tylko string. Niestety mam za mało doświadczenia i nie mogę zrozumieć dlaczego to nie działa.
nevt
Ostatnie co mi przychodzi do głowy - to różnica w stronach kodowych. Jak widzę, kolumny w bazie są w kodowaniu utf-8, a czy plik skryptu również? Bo jeżeli w innej, to trzeba jawnie przekodować łańcuch zapytania na utf-8...

Pozdrawiam.
Chrom
Strzał pewnie w dziesiątkę owszem kodowanie na stronie formularza mam iso-8859-2 a na stronie wyników w UTF8 ponieważ pokazywało krzaczki w polskich nazwiskach jak to wszystko pogodzić?
Z drugiej strony litery A B C D E a takie wchodzą w rachubę są takie same w obu kodowaniach.
Co w takim wypadku zrobić ?

Zmieniłem kodowanie w BD na latin2 ale o nic nie dało

następnie

Zmieniłem kodowanie w BD na utf8_polish_ciale o nic nie dało
Zmieniłem kodowanie stron na utf-8 i nic, dalej nie wybiera rekordu.
nevt
kodowanie ma kolosalne znaczenie. Myślę, że jednak tu leży przyczyna. Czy po zmianie kodowania column na latin-2 oglądałeś dane (np. SELECT * from USERS) questionmark.gif Mógłbyś pokazać chociaż 1 wiersz?
A właśnie - gdzie na jakim poziomie zmieniałeś kodowanie? Jeśli dla bazy i/lub w tabeli users - to nic nie dało - MySQL i tak pamięta kodowanie zdefiniowane dla każdej kolumny. Zmień kodowanie na latin konkretnie kolumny dom...

Pozdrawiam - problem coraz bardziej mnie wciąga - wydaje się banalny a ciągle coś nie tak smile.gif
Chrom
dane users dla lokalu 2 wyglądają tak:
haslo abc123
haslomd5 e99a18c428cb38d5f260853678922e03
adres ko74
mieszkanie 2
liczba odpowiedzi 1
W tej chwili tabela wygląda następująco:
  1. CREATE TABLE `users` (
  2. `id` mediumint(6) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `haslo` varchar(32) collate utf8_polish_ci NOT NULL,
  4. `budynek` varchar(15) collate utf8_polish_ci NOT NULL,
  5. `bud` varchar(12) collate utf8_polish_ci NOT NULL DEFAULT 'ko74',
  6. `lokal` varchar(6) collate utf8_polish_ci NOT NULL DEFAULT '0',
  7. UNIQUE KEY `id` (`id`)
  8. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci PACK_KEYS=0 AUTO_INCREMENT=7418 ;

a zapytanie
  1. <?php
  2. include("../../cgi-bin/db.sql");
  3. $sql = "SELECT * FROM `users` WHERE `bud` = '$adres' AND `lokal` = '$mieszkanie' AND `haslo` = '$haslomd5' "; 
  4. $result = @mysql_query($sql, $polaczenie) or die("brak odpowiedzi z zapytania - sid");
  5.  
  6. $wynik = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM `users` WHERE  `bud` = '$adres' AND `lokal` = '$mieszkanie' AND `haslo` = '$haslomd5' "));
  7. $l_odp = $wynik[0];
  8.  
  9. while ($row = mysql_fetch_array($result)) {
  10. $id = $row['id'];
  11. $budynek = $row['budynek'];
  12. $bud = $row['bud'];
  13. $lokal = $row['lokal'];
  14. }
  15. ?>

jak dam echo zmiennej dostaję
hasło abc123
haslomd5 e99a18c428cb38d5f260853678922e03
adres ko74
mieszkanie 25A
liczba odpowiedzi 0
a rekord jest jak byk
Zrzut:
  1. (27, 'e99a18c428cb38d5f260853678922e03', ' KO 7', 'ko74', ' 25A', 0.00, '- - -', '- - -', '0', '0', 'adres email', 'Brak uwag', '0'),


Wszystkie kodowania na utf-8 bazy danych pola lokal strony formularza, nie wiem co jest grane
nevt
możliwe, że tu jest problem: ' 25A' - masz odstęp (spację) na początku mieszkania.
Poza tym, w danych masz pola:
adres ko74
mieszkanie 2
a w zapytaniu: budynek, bud, lokal...
więc jak się te kolumny nazywają? - bo już zgłupiałem...
Dodatkowo zrzut SQL który pokazałeś nijak nie pasuje do tego CREATE TABLE który podałeś... to na pewno są te same tabele?
Chrom
Wielkie dzięki chodziło o spację przed 25A,
swoją drogą czy można usunąć spacje w komórkach tabeli?
kitol
Usunięcie wszystkich spacji w kolumnie:

  1. UPDATE tabela SET kolumna=REPLACE(kolumna,' ','')


Spacje na końcu/początku tekstu można usunąć funkcją TRIM()
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-2024 Invision Power Services, Inc.