• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

PHP nie potrafi zwrócić wartości z zapytania SQL.

Object Storage Arubacloud
0 głosów
220 wizyt
pytanie zadane 9 października 2020 w PHP przez Bartx Bywalec (2,120 p.)

Witam, poniższy kod:

$start = "Gdańsk";
$end = "Gdynia";
$stations = "";

$connection = mysqli_connect("localhost", "root", "", "path");
$sql = "SELECT * FROM linie WHERE stacje LIKE (SELECT CONCAT(\'%\', (SELECT id FROM stacje WHERE nazwa = \'$start\'), \';%\')) AND stacje LIKE (SELECT CONCAT(\'%\', (SELECT id FROM stacje WHERE nazwa = \'$end\'), \';%\'));";
$query = mysqli_query($connection, $sql);

while ($result = mysqli_fetch_assoc($query)){
    echo $result["stacje"];
}

po wykonaniu zwraca:

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, bool given in ... line 11

Komenda Sql podana wyżej działa, jeżeli użyje jej w phpmyadmin.

Gdy w zmiennej sql zostawię tylko "SELECT * FROM linie" nic więcej nie zmieniając to normalnie mi zwraca, ale nie o to mi jednak chodzi.

W czym może tkwić problem?

2 odpowiedzi

0 głosów
odpowiedź 9 października 2020 przez Comandeer Guru (600,810 p.)
Zapytanie ewidentnie rzuca błąd, więc wypada sprawdzić jaki → https://www.php.net/mysqli_error

Tak na oko, to niepotrzebnie escape'ujesz apostrofy.
komentarz 9 października 2020 przez Bartx Bywalec (2,120 p.)
Jeśli zastosuję var_dump na zmiennej zawierającej zapytanie, czyli $sql, to zwraca to "string(204)" i wartość zmiennej. A co do zapytania, w jednym i drugim przypadku jest ono identyczne.
komentarz 9 października 2020 przez Comandeer Guru (600,810 p.)
No nie może być, bo identyczne zapytanie zwracałoby identyczne wyniki. Jak przekleisz to zapytanie z kodu do phpMyAdmin, to zwraca pożądany wynik?
komentarz 9 października 2020 przez Bartx Bywalec (2,120 p.)
Tak dokładnie jest
komentarz 9 października 2020 przez Comandeer Guru (600,810 p.)
Hmm, trudno coś więcej tak na sucho powiedzieć, nie mając pod ręką bazy, na której to można przetestować na żywo.
komentarz 9 października 2020 przez Bartx Bywalec (2,120 p.)
No ok, niezbyt jest możliwość aby tę bazę łatwo udostępnić do użytku komuś innemu, ale dzięki za pomoc.
0 głosów
odpowiedź 10 października 2020 przez hoktaur Pasjonat (22,250 p.)

Rozumiem że to:

(SELECT id FROM stacje WHERE nazwa = \'$start\')

zwraca jakieś ID czyli cyfrę

to po co jakieś tam LIKE i to jeszcze z %?

stacje = (SELECT id FROM stacje WHERE nazwa = \'$start\')

dla jednego ID lub dla wielu:

stacje IN (SELECT id FROM stacje WHERE nazwa = \'$start\')

 

komentarz 10 października 2020 przez hoktaur Pasjonat (22,250 p.)

swoją drogą rozumiem że bazy nie możesz podesłać ale chociaż pokaż strukturę tabel

DESC nazwa_tabeli;

 

komentarz 10 października 2020 przez hoktaur Pasjonat (22,250 p.)

załapałem chyba ty nie masz w stacjach liczby bo stacja Gdańsk  i Gdynia nie może mieć tego samego ID wiec warunek był by bezsensu no chyba że nie podałeś nam całego zapytania?

ty masz tam stringa z ID'kami

'11 43 22 33'

i po to ten LIKE ;)

... od razu ci powiem że źle kombinujesz musisz dodać kolejną table z relacjami linia do stacje

i LEFT JOIN łączyć tabele a następnie użyć GROUP BY

 

 

 

komentarz 10 października 2020 przez hoktaur Pasjonat (22,250 p.)
ehhh dawno mnie tu nie było nie zauważyłem 8 poprzednich komentarzy które były zwinięte ale dobrze się domyśliłem

te twoje relacje

1;2;4;5 itd

to zły pomysł zrób jak ci pisałem wyżej

Podobne pytania

+1 głos
1 odpowiedź 264 wizyt
pytanie zadane 10 grudnia 2020 w PHP przez ariva6152 Użytkownik (570 p.)
0 głosów
1 odpowiedź 120 wizyt
pytanie zadane 6 października 2020 w PHP przez KumberTwo Dyskutant (8,270 p.)
+1 głos
1 odpowiedź 122 wizyt
pytanie zadane 27 września 2020 w PHP przez Xele Początkujący (310 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...