![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 89 Pomógł: 7 Dołączył: 19.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Czy ktoś potrafi wytłumaczyć dlaczego ten kod nie wywala błędu? ba nawet zwraca wyniki zupełnie jak w przypadku kiedy w bind_param podstawie poprawna literę czyli 's'. Błąd wywala jedynie dla 'b' oraz niepoprawnej ilości parametrów.
Sprawdziłem to dogłębnie i jeżeli bind_param 'oczekuje' wartości typu int a podamy mu string to wynikiem będzie wartość 0 (tak jak w rzutowaniu). Ale niestety zapytanie zostanie wykonane z tą wartością czyli dla kodu powyżej poleci
czyli wypisze wszystkie rekordy z tabeli user, tu jest to bardziej błąd programisty bo w bind_param powinno być 's', ale gdyby kod wyglądał tak
otrzymamy wszystkie dane usera o id = 0, pytanie czy jest to bug? zapytanie nie powinno się wykonać, tak jak jest w przypadku podania 's' w bind_param oraz wartości int. Wynikiem będzie również 0 ale nie dostaniemy żadnych wyników. Czy ktoś może to potwierdzić? Ten post edytował taktu 25.06.2009, 13:31:47 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 51 Pomógł: 5 Dołączył: 12.04.2007 Skąd: 1=1 Ostrzeżenie: (0%) ![]() ![]() |
ciekawe spostrzeżenie, nie SELECTowałem nigdy przy użyciu prepared statements, raczej uzywam dla zapytań typu INSERT, DELETE
może spróbowałbyś wstawiając jako zapytanie Kod $sql = 'SELECT * FROM user WHERE user_name != 0 and user_name = ?'; strzelam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Ten post edytował hostingekspert 25.06.2009, 18:07:12 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 89 Pomógł: 7 Dołączył: 19.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
taki sql daje 0 wyników ale moim zdaniem nie tędy droga, nie warto zmieniać każdego odwołania do bazy (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
pozostaje numerować rekordy od 1 lub na własną rękę sprawdzać czy zmienna jest int |
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat ciekawe spostrzeżenie, nie SELECTowałem nigdy przy użyciu prepared statements sorki, ale to ze nie umiesz/nie chcesz stosowac bind przy selectach to czemu to ma byc ciekawe? @taktu ...user_name = 0 Tutaj mysql zachowuje się podobnie do php, czyli rzutuje stringa (user_name) do liczby, czyli 0. wowczas 0 = 0 wiec wszystko sie zgadza. Nie wiem czemu wiec dla user_name mowisz w bind ze ma to byc int? |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 89 Pomógł: 7 Dołączył: 19.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem czemu wiec dla user_name mowisz w bind ze ma to byc int? To był oczywisty błąd, chciałem sprawdzić jak zachowa się funkcja, i niestety wykonuje się a liczyłem że będzie inaczej. I małe sprostowanie, jeżeli podamy w bind ze ma być string to też się wykona tylko w "". Więc jeżeli damy mu liczbę 1234 to poleci "1234". |
|
|
![]()
Post
#6
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat I małe sprostowanie, jeżeli podamy w bind ze ma być string to też się wykona tylko w "". Więc jeżeli damy mu liczbę 1234 to poleci "1234". No to raczej dosc oczywiste.Skoro mowisz ze ma byc string to bedzie to string
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 02:04 |