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

Zaawansowana kwerenda w PHP

Object Storage Arubacloud
0 głosów
1,603 wizyt
pytanie zadane 27 grudnia 2016 w PHP przez kacperdyba Gaduła (3,290 p.)

Cześć,

 

Mam problem z kwerendą w PHP wysyłaną do bazy danych MySQL.

Gdy wysyłam zwykłą kwerendę ( SELECT xxx From yyy WHERE ccc=aaa ) wszystko działa poprawnie. Problem pojawia się w momencie gdy próbuje wyciągnąć dane z kilku tabel. Fragment kodu:

  $result = $connect->query(
    sprintf('SELECT "preference.MinHour", "preference.MinMin", "preference.MaxHour", "preference.MaxMin", "preference.MeetTime", "users.Name", "users.LastName"
       FROM preference, users WHERE UserID="%s" AND "preference.UserID" = "users.UserID"',
    $id));

    $check= $result->num_rows;

 

W momencie wejścia na stronę wyskakuje błąd:

Notice: Trying to get property of non-object in C:\xampp\htdocs\appmeetings\meetings.php on line 50

odnosi się on do lini:

 $check= $result->num_rows;

 

Czy wiecie może gdzie jest problem?

1 odpowiedź

+1 głos
odpowiedź 27 grudnia 2016 przez hoktaur Pasjonat (22,250 p.)
wybrane 27 grudnia 2016 przez kacperdyba
 
Najlepsza

wydaje mi się że błąd jest w zapytaniu co wyświetla za błędy apache?

W ogóle co wy z tym łączeniem tabel po przecinku może trzeba zainteresować się JOIN i relacjami pomiędzy tabelami

https://www.youtube.com/watch?v=P2YT9PvflUM&index=2&list=PLOYHgt8dIdoymv-Wzvs8M-OsKFD31VTVZ

daj var_dump'a z

sprintf('SELECT "preference.MinHour", "preference.MinMin", "preference.MaxHour", "preference.MaxMin", "preference.MeetTime", "users.Name", "users.LastName"
     FROM preference, users WHERE UserID="%s" AND "preference.UserID" = "users.UserID"',
  $id)

 

komentarz 27 grudnia 2016 przez kacperdyba Gaduła (3,290 p.)
echo var_dump($result);

 

bool(false) 

komentarz 27 grudnia 2016 przez hoktaur Pasjonat (22,250 p.)
Ahhhaa już wiem niepotrzebnie masz te ciapki (cudzysłowie), spróbuj z

SELECT preference.MinHour, preference.MinMin, preference.MaxHour, preference.MaxMin, preference.MeetTime, users.Name, users.LastName FROM preference, users WHERE UserID="%s" AND preference.UserID = users.UserID
komentarz 27 grudnia 2016 przez kacperdyba Gaduła (3,290 p.)
Nie działa :/

 

Parse error: syntax error, unexpected 'preference' (T_STRING) in C:\xampp\htdocs\appmeetings\meetings.php on line 46
komentarz 27 grudnia 2016 przez hoktaur Pasjonat (22,250 p.)
edycja 27 grudnia 2016 przez hoktaur

nie zjadłeś gdzieś czegoś a raczej czy nie za dużo ciapków ? jeszcze raz cały sprintf


 
sprintf('SELECT preference.MinHour, preference.MinMin, preference.MaxHour, preference.MaxMin, preference.MeetTime, users.Name, users.LastName FROM preference, users WHERE UserID="%s" AND preference.UserID = users.UserID', $id)

swoją drogą ja bym to zapisał tak nie jakiś tam sprintf


 
'SELECT preference.MinHour, preference.MinMin, preference.MaxHour, preference.MaxMin, preference.MeetTime, users.Name, users.LastName FROM preference, users WHERE UserID=' . $id . ' AND preference.UserID = users.UserID'

albo jeszcze używając aliasów

'SELECT p.MinHour, p.MinMin, p.MaxHour, p.MaxMin, p.MeetTime, u.Name, u.LastName FROM preference AS p, users AS u WHERE UserID=' . $id . ' AND p.UserID = u.UserID'

w każdym razie w razie problemów pokaż jak to wyszło

komentarz 27 grudnia 2016 przez kacperdyba Gaduła (3,290 p.)
Niestety każda z powyższych wersji zwraca to samo - błąd który był na początku:

 

Notice: Trying to get property of non-object in C:\xampp\htdocs\appmeetings\meetings.php on line 50
komentarz 27 grudnia 2016 przez hoktaur Pasjonat (22,250 p.)

A i jeszcze natchnęło mnie jak wpisywałem ta aliasy

masz

WHERE UserID=' . $id . ' AND p.UserID = u.UserID'

i tak patrze że masz

p.UserID = u.UserID'

a tu brak

WHERE UserID=' . $id . '

i masz błąd

ambiguous column names

jak by dalej nie działo to wpisz w czystym SQL (tylko nie zapomnij z której tabeli masz te UserID)

SELECT preference.MinHour, preference.MinMin, preference.MaxHour, preference.MaxMin, preference.MeetTime, users.Name, users.LastName FROM preference, users WHERE UserID="1" AND preference.UserID = users.UserID;

 

komentarz 27 grudnia 2016 przez kacperdyba Gaduła (3,290 p.)
Działa :) Po dodaniu WHERE preference.UserID=...

Myślałem, że jeżeli te wartości są takie same, to nie ma znaczenia które weźmie, a SQL weźmie to 1... A on nie wiedział które i przez to był błąd. Dzięki za pomoc :)
komentarz 27 grudnia 2016 przez hoktaur Pasjonat (22,250 p.)
P.S. Ja zawsze zapytanie pisze w czystym SQL (zwłaszcza złożone) a potem wkładam do kodu z miejscem na zmienne ...
komentarz 27 grudnia 2016 przez efiku Szeryf (75,160 p.)
To jeszcze nauczcie się bindować parametry w zapytaniu oboje :)

a nie jakieś sprintf ;P
komentarz 27 grudnia 2016 przez hoktaur Pasjonat (22,250 p.)
a może jakiś przykładzik ?
komentarz 27 grudnia 2016 przez efiku Szeryf (75,160 p.)
http://phpmajster.blogspot.com/2015/05/php-pdo-podstawy-3-bindowanie.html

No, ale mysqli też tam gdzieś ma to ubogie bindowanie .. :)
komentarz 28 grudnia 2016 przez CzikaCarry Szeryf (75,340 p.)
Efik dobrze prawi, sprintf tylko niepotrzebnie zaśmieca zapytanie, jest ono mniej czytelne, a jak wszystko pobiedujesz to będzie git majonez.

Podobne pytania

0 głosów
1 odpowiedź 422 wizyt
+1 głos
1 odpowiedź 1,951 wizyt
pytanie zadane 24 września 2016 w SQL, bazy danych przez Cezary Kania Nowicjusz (130 p.)
0 głosów
1 odpowiedź 897 wizyt

92,579 zapytań

141,432 odpowiedzi

319,662 komentarzy

61,964 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!

...