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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
405 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 (606,240 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.)
Jak usunę apostrofy to nie zwraca ani wyniku ani ostrzeżenia/błędu, a przypominam, ze phpmyadmin zwaraca.
komentarz 9 października 2020 przez Comandeer Guru (606,240 p.)

A co zwraca mysqli_error?

komentarz 9 października 2020 przez Bartx Bywalec (2,120 p.)
Jak usunę "\" to nic nie zwraca, ani błędu ani wyniku, a jak nie zmieniam nic to: "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '\'Gdańsk\'), \';%\')) AND stacje LIKE (SELECT CONCAT(\'%\', (SELECT id FROM ' at line 1"
komentarz 9 października 2020 przez Comandeer Guru (606,240 p.)

Więc zapytanie z apostrofami jest niepoprawne składniowo. Bez nich jest poprawne, ale jest zwracany pusty wynik. Zrób sobie var_dump( $sql ) i zobacz, czy się na pewno dobre zapytanie utworzyło.

komentarz 9 października 2020 przez Bartx Bywalec (2,120 p.)
var_dump zwraca "bool(false)", kompletnie nie wiem dlaczego.
komentarz 9 października 2020 przez Comandeer Guru (606,240 p.)

Chodziło mi o var_dump na zmiennej zawierającej tekst zapytania i zobaczenie, czy na pewno jest ono poprawne (np. czy zmienne się odpowiednio podstawiły).

komentarz 9 października 2020 przez Bartx Bywalec (2,120 p.)

Po usunięciu "\" var_dump($query) zwraca:

"mysqli_result Object ( [current_field] => 0 [field_count] => 9 [lengths] => [num_rows] => 0 [type] => 0 )"

Za to te same zapytanie w phpmyadmin zwraca:

komentarz 9 października 2020 przez Comandeer Guru (606,240 p.)

Czyli to nie jest to samo zapytanie. Pozwól, że po raz trzeci powtórzę:

var_dump na zmiennej zawierającej tekst zapytania

TEKST, nie WYNIK

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 (606,240 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 (606,240 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ź 293 wizyt
pytanie zadane 10 grudnia 2020 w PHP przez ariva6152 Użytkownik (570 p.)
0 głosów
1 odpowiedź 179 wizyt
pytanie zadane 6 października 2020 w PHP przez KumberTwo Dyskutant (8,270 p.)
+1 głos
1 odpowiedź 147 wizyt
pytanie zadane 27 września 2020 w PHP przez Xele Początkujący (310 p.)

93,159 zapytań

142,171 odpowiedzi

321,890 komentarzy

62,489 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 453p. - dia-Chann
  2. 453p. - Marcin Putra
  3. 447p. - Łukasz Piwowar
  4. 443p. - CC PL
  5. 431p. - Łukasz Eckert
  6. 428p. - rafalszastok
  7. 423p. - Adrian Wieprzkowicz
  8. 418p. - rucin93
  9. 410p. - Piotr Aleksandrowicz
  10. 408p. - ksalekk
  11. 402p. - Mariusz Fornal
  12. 340p. - ssynowiec
  13. 329p. - nidomika
  14. 319p. - Michal Drewniak
  15. 298p. - Dawid128
Szczegóły i pełne wyniki

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 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...