Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> (PHP) 20.99 != 20.99 (MYSQL)
zflyk
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 5.11.2007

Ostrzeżenie: (0%)
-----


Witam. Mam taki problem i nie mam pojęcia jak to zrobić. Otórz wykonuję zapytanie do bazy: SELECT cena FROM ........ WHERE cena='".$cena."' .......
Cena nie jest jedynym warunkiem, ale nie o to chodzi. Chodzi o to że w bazie znajduje się wartość np: 20.99 (typ kolumny to FLOAT(10,2)
na 100% jest tam ta wartość bo sprawdzałem. Przy wykonaniu zapytania $cena=20.99 a jednak MYSQL nie widzi podobieństwa i nie znajduje mi tej ceny. Wyświetlałem sobie tą $cena przed zapytaniem i jest poprawna. Inne wartość WHERE też są ok. Problem jest z ceną :/ POMOCY. Co zrobić żeby MYSQL porównał obie wartości poprawnie?

zapomniałem dodać że jesli w bazię będzie wartość 10.00 i taką samą chcemy porównać to ZNAJDZIE! więc
10.00 == 10.00
20.99 != 20.99 blinksmiley.gif sciana.gif

Ten post edytował zflyk 11.11.2007, 02:05:27
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
prgTW
post
Post #2





Grupa: Zarejestrowani
Postów: 62
Pomógł: 3
Dołączył: 10.09.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


  1. SELECT ... FROM ... WHERE cena = 20.99
  2. --a nie
  3. SELECT ... FROM ... WHERE cena = "20.99"

w koncu kolumna liczbowa a nie tekstowa, prawda ... wiec czemu liczba podana stringowo?

Ten post edytował prgTW 11.11.2007, 02:06:40


--------------------
Pozdrawiam
Tomasz Wójcik
..:: prgTW ::..
Go to the top of the page
+Quote Post
zflyk
post
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 5.11.2007

Ostrzeżenie: (0%)
-----


Cytat(prgTW @ 11.11.2007, 02:05:55 ) *
  1. SELECT ... FROM ... WHERE cena = 20.99
  2. --a nie
  3. SELECT ... FROM ... WHERE cena = "20.99"

w koncu kolumna liczbowa a nie tekstowa, prawda ... wiec czemu liczba podana stringowo?

no pomysł niezły, ale niebardzo :/

  1. <?php
  2. $cena = 35.30;
  3. ?>

Update robi ok
  1. <?php
  2. $pytanie1 = @mysql_query("UPDATE gm_towary SET cena='".$cena."' WHERE id='1'");
  3. ?>

wpisuje 35.30

ale przy SELECT już nie.
  1. <?php
  2. $pytanie2 = @mysql_query("SELECT cena FROM gm_towary WHERE cena='".$cena."'");
  3. ?>

czy w takiej postawi jak proponowałeś
  1. <?php
  2. $pytanie2 = @mysql_query("SELECT cena FROM gm_towary WHERE cena=".$cena."");
  3. ?>

nic nie zwraca

Dla
  1. <?php
  2. $cena = 35.00; || $cena= 35.50
  3. ?>

jest OK i dla innych wartości po przecinku nie znajduje nic sad.gif
Go to the top of the page
+Quote Post
BaN
post
Post #4





Grupa: Zarejestrowani
Postów: 158
Pomógł: 43
Dołączył: 9.11.2007

Ostrzeżenie: (0%)
-----


Możesz zastosować DECIMAL, a nie FLOAT. Problem z liczbami rzeczywistymi jest opisany w dokumentacji
Go to the top of the page
+Quote Post
prgTW
post
Post #5





Grupa: Zarejestrowani
Postów: 62
Pomógł: 3
Dołączył: 10.09.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


mozna CASTowac ale to juz mija sie z celem


--------------------
Pozdrawiam
Tomasz Wójcik
..:: prgTW ::..
Go to the top of the page
+Quote Post
zflyk
post
Post #6





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 5.11.2007

Ostrzeżenie: (0%)
-----


Dzięki za propozycje ale już sobie poradziłem. Przeglądając to forum natknąłem się na "zamienny sposób na ten problem. Koleś napisał że on zamienia kropki na spacje, więc poszedłem tym tropem. napisałem prostą funkcję która zamienia kropkę na spacje lub odwrotnie, sama sprawdza co ma zrobić i zamieniłem w bazie Float na Varchar smile.gif jest OK
Oto ta funkcja, może komuś się przyda:
  1. <?php
  2. function konv($string)
  3. {
  4. if (eregi('.', $string))
  5. {
  6. $string = str_replace(".", " ", $string);
  7. return $string;
  8. }
  9. elseif (eregi(' ', $string))
  10. {
  11. $string = str_replace(" ", ".", $string);
  12. return $string;
  13. }
  14. else return $string;
  15. }
  16. ?>


Ten post edytował zflyk 12.11.2007, 00:18:58
Go to the top of the page
+Quote Post
prgTW
post
Post #7





Grupa: Zarejestrowani
Postów: 62
Pomógł: 3
Dołączył: 10.09.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Po co uruchamiać do tego wyrażenia regularne?
  1. <?php
  2. function konv($string){
  3. if(strpos($string, '.') !== false)
  4. return str_replace('.', ' ', &$string);
  5. else
  6. return str_replace(' ', '.', &$string);
  7. }
  8. ?>


--------------------
Pozdrawiam
Tomasz Wójcik
..:: prgTW ::..
Go to the top of the page
+Quote Post
zflyk
post
Post #8





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 5.11.2007

Ostrzeżenie: (0%)
-----


BO eregi troche kojarzę a strpos nie smile.gif więc dlatego
Go to the top of the page
+Quote Post
prgTW
post
Post #9





Grupa: Zarejestrowani
Postów: 62
Pomógł: 3
Dołączył: 10.09.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Uuu Panie winksmiley.jpg to tak jakby nie wiedzieć jak włączyć komputer ale umieć napisać Windowsa w assemblerze tongue.gif


--------------------
Pozdrawiam
Tomasz Wójcik
..:: prgTW ::..
Go to the top of the page
+Quote Post
zflyk
post
Post #10





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 5.11.2007

Ostrzeżenie: (0%)
-----


Cytat(prgTW @ 11.11.2007, 23:59:08 ) *
Uuu Panie winksmiley.jpg to tak jakby nie wiedzieć jak włączyć komputer ale umieć napisać Windowsa w assemblerze tongue.gif


HEHEHE winksmiley.jpg
( a asemblera znam tongue.gif ale żeby winde w nim napisać to ohmy.gif ) można zamknąć temat bo małe OT zaczyna się robić.

Ten post edytował zflyk 12.11.2007, 00:15:50
Go to the top of the page
+Quote Post
orson
post
Post #11





Grupa: Zarejestrowani
Postów: 548
Pomógł: 2
Dołączył: 19.07.2003

Ostrzeżenie: (0%)
-----


witam

Twoje zapytanie nadal wysyłało cenę jako tekst. Nie jest ważne jak jest zmienna w php inicjowana/jakiego jest typu. Masz:
Kod
"UPDATE gm_towary SET cena='".$cena."' WHERE id='1'"

a powinieneś mieć:
Kod
"UPDATE gm_towary SET cena=".$cena." WHERE id='1'"

czyli bez pojedynczych '

pozdrawiam


--------------------
Computer games don't affect kids; I mean if <span style="font-weight: bold;">Pac Man</span> affected us as kids,we would all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music.
Go to the top of the page
+Quote Post
bugme
post
Post #12





Grupa: Zablokowani
Postów: 16
Pomógł: 1
Dołączył: 12.09.2006

Ostrzeżenie: (0%)
-----


Cytat(orson @ 14.11.2007, 00:32:14 ) *
Nie jest ważne jak jest zmienna w php inicjowana/jakiego jest typu.


W tym wypadku jest ważne, bo konwersja float=>string (w php a nie mysql'u) jest powodem problemu.
Powinno być:
  1. <?php
  2. $cena = "35.30";
  3. $pytanie2 = @mysql_query("SELECT cena FROM gm_towary WHERE cena=".$cena);
  4. ?>

albo:
  1. <?php
  2. $cena = 35.30; 
  3. $pytanie2 = @mysql_query("SELECT cena FROM gm_towary WHERE cena=".sprintf("%01.2f",$cena));
  4. ?>


Z uwagami o apostrofach się zgadzam.
Go to the top of the page
+Quote Post
zflyk
post
Post #13





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 5.11.2007

Ostrzeżenie: (0%)
-----


Już próbowałem bez apostrofów, bo ktoś wcześniej o tym pisał, ten sam objaw.
  1. <?php
  2. $cena = "35.30";
  3. $pytanie2 = @mysql_query("SELECT cena FROM gm_towary WHERE cena=".$cena);
  4. ?>

tego też próbowałem i nic :/ Już sobie z tym poradziłem. Dzięki za odpowiedzi. Pozdr
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 18:41