• 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.

VPS Starter Arubacloud
0 głosów
317 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 (605,260 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 (605,260 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 (605,260 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ź 286 wizyt
pytanie zadane 10 grudnia 2020 w PHP przez ariva6152 Użytkownik (570 p.)
0 głosów
1 odpowiedź 157 wizyt
pytanie zadane 6 października 2020 w PHP przez KumberTwo Dyskutant (8,270 p.)
+1 głos
1 odpowiedź 138 wizyt
pytanie zadane 27 września 2020 w PHP przez Xele Początkujący (310 p.)

93,028 zapytań

141,991 odpowiedzi

321,294 komentarzy

62,375 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...