Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2014-10-15 16:15:32

  misioooo - Członek DUG

misioooo
Członek DUG
Skąd: Wrocław
Zarejestrowany: 2006-06-10

[SOLVED] Zapytania do bazy danych MySQL w PHP

Hej!
Połączenie z db jest ok. Tabele istnieją, literówki nie znalazłem...
Mam mniej więcej taki kod (fragment stwarzający problem):

Kod:

$results = $mysqli->query("SELECT name, start_time, end_time, room_id FROM mrbs_entry WHERE start_time >= UNIX_TIMESTAMP()-21600 AND end_time >= UNIX_TIMESTAMP() ORDER BY start_time");
if($results){ 
    while($row = $results->fetch_object()) {
      $room = $mysqli->query('SELECT room_name FROM mrbs_room WHERE id = $row->room_id');

I na tej ostatniej linijce się wywala.
Wg phpMyAdmina zarówno pola id w tabeli room jak i pola room_id w tabeli entry są typu INT(11).

W logu apacha mam:

Kod:

[Wed Oct 15 16:03:38.296135 2014] [:error] [pid 16062] [client ::1:52875] PHP Catchable fatal error:  Object of class mysqli_result could not be converted to string in /var/www/html/rss/rss3.php on line 82

Chyba, że inaczej to można wydobyć z tabeli - potrzebuję wartości room_name z wiersza posiadającego (unikatowy) ID = room_id z innej tabeli/tej samej bazy.
Dodam, że z poziomu phpadmina zapytanie w bazie wykonuje się )oczywiście zamiast zmiennej wstawiam cyferkę). Jak w pliku php też podstawię cyferkę zamiast zmiennej - nadal to samo... Nie działa i pluje w/w errorem z apacza.

Ostatnio edytowany przez misioooo (2014-10-16 09:56:43)


[img]https://wiki.debian.org/DebianArt/Themes/Lines?action=AttachFile&do=get&target=banner.png[/img]

Offline

 

#2  2014-10-15 16:29:13

  winnetou - złodziej wirków ]:->

winnetou
złodziej wirków ]:->
Skąd: Jasło/Rzeszów kiedyś Gdańs
Zarejestrowany: 2008-03-31
Serwis

Re: [SOLVED] Zapytania do bazy danych MySQL w PHP

a czemu nie zrobisz tego po ludzki tylko kombinujesz z jakimiś "obiektami"?


Na stronie PHP.net masz idealne przykłady jak to robić ;)

Kod:

<?php
mysql_connect("localhost", "mysql_user", "mysql_password") or
    die("Could not connect: " . mysql_error());
mysql_select_db("mydb");

$result = mysql_query("SELECT id, name FROM mytable");

while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    printf("ID: %s  Name: %s", $row[0], $row[1]);  
}

mysql_free_result($result);
?>

Poza tym skoro potrzebujesz tylko jednego pola to po grzyba ich tyle w zapytaniu wybierasz? :>

I taki cytacik w temacie:

Rozejrzyj się wokoło. Zobacz jak zbudowany jest świat. Szybko stwierdzisz, że świat składa się z obiektów, które wchodzą w interakcje. Tak mniej więcej zaczyna się jakieś 99% kursów dotyczących programowania obiektowego. Pozostałe 1% zaczyna się mniej więcej tak: php jest językiem obiektowym.[/quote]


LRU: #472938
[b]napisz do mnie:[/b] ola@mojmail.eu
[url=http://valhalla.org.pl]Hołmpejdż[/url] | [url=http://valhalla.org.pl/foto]Galerie[/url] | [url=http://valhalla.org.pl/tech]"Twórczość"[/url] || [url=http://img.munn.in]Free Image Hosting[/url]

Offline

 

#3  2014-10-15 16:36:34

  misioooo - Członek DUG

misioooo
Członek DUG
Skąd: Wrocław
Zarejestrowany: 2006-06-10

Re: [SOLVED] Zapytania do bazy danych MySQL w PHP

Nie zauważyłeś... Ja w kodzie korzystam z dwóch różnych tabel. Na początku biorę ileśtam różnych pól.
Potem je przetwarzam jak chcę i potrzebuję jeszcze jednego pola z drugiej tabeli:

Kod:

$room = $mysqli->query('SELECT room_name FROM mrbs_room WHERE id = $row->room_id');

I to pole ma być z wiersza o ID = room_id_z_pierwszej_tabeli
Przykład, który podałeś to odpowiednik mojego pierwszego zapytania do tabeli 1:

Kod:

$results = $mysqli->query("SELECT name, start_time, end_time, room_id FROM mrbs_entry WHERE start_time >= UNIX_TIMESTAMP()-21600 AND end_time >= UNIX_TIMESTAMP() ORDER BY start_time");

I to mi działa ok.

Czemu mysql, a nie mysqli?


[img]https://wiki.debian.org/DebianArt/Themes/Lines?action=AttachFile&do=get&target=banner.png[/img]

Offline

 

#4  2014-10-15 16:45:53

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: [SOLVED] Zapytania do bazy danych MySQL w PHP

Takie rzeczy na dwóch tabelach robi się złączeniami wewnętrznymi lub zewnętrznymi, zainteresuj się, co robi w Mysql funkcja [b]JOIN[/b].
W każdym razie potrzebujesz tylko [b]jednego zapytania[/b], a nie dwóch.

Sznurki:
http://dev.mysql.com/doc/refman/5.0/en/join.html
http://webmaster.helion.pl/index.php/kursmysql-pobieranie-danych-z-wielu-tabel-i-laczenie-wynikow-zapytan

Ostatnio edytowany przez Jacekalex (2014-10-16 11:14:48)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#5  2014-10-15 17:12:02

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: [SOLVED] Zapytania do bazy danych MySQL w PHP

tak przy okazji - nie chcę być, kolego @jacekalex, źle zrozumiany, ale o ile znam Produkt Horego Programisty to funkcje typy mysql_cośtam i mysqli_cośtam to dwa różne światy.
Owszem, oba to są takie małe światki funkcjonujące w PHP - co nie zmienia faktu że są różne, i gość z Twoim doświadczeniem powinien je (przynajmniej po trzeźwemu) odróżniać.


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#6  2014-10-15 17:18:17

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: [SOLVED] Zapytania do bazy danych MySQL w PHP

Oczywiście, że różne światy, ale we wsi ludzie mówią, że oba do połączenia z bazą na serwerze  Mysql.
I konia z rzędem temu, co zna taką funkcję do połączenia z Mysql z poziomu PHP, które nie obsługuje złączeń JOIN. :D

Ostatnio edytowany przez Jacekalex (2014-10-15 19:45:10)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#7  2014-10-15 17:26:37

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: [SOLVED] Zapytania do bazy danych MySQL w PHP

przede wszystkim - odróżnijmy funkcję dowolnego języka programowania typu "(my|pg|oracle|ms)sql_query" ('dupa') od zawartości owej kwerendy - która nie ma nic wspólnego z pechapem, pythonem, perlem czy używanym lokalnie językiem ZuluGula.
Niestety - z różnych dziwnych przyczyn (z których niedouczenie i awersja do czytania dokumentacji są najbardziej popularne) tzw. "programiści" PHP (cudzysłów użyty intencjonalnie) uważają, że kwerenda SQL (a konkretniej MySQL, bo innych przecież nie ma) jest częścią "języka" "programowania".


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#8  2014-10-15 19:51:42

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: [SOLVED] Zapytania do bazy danych MySQL w PHP

@Ethanak

Ciągniesz OT na siłę?
W php-mysql -można używać złączeń JOIN?
W php-mysqli można używać złączeń JOIN?

Z moich informacji wynika, że można w obu.

O Perlach, Pythonach i Zulugulach ten wątek raczej nie jest, podobnie jak nie jest np o PgSQL, ani o SQlite czy Firebirdzie.
Dotyczy dwóch sposobów połączenia z bazą Mysql z poziomu PHP, które nie są ze sobą zgodne, ale też w stosunku do języka SQL nie są tak rożne, jak bash i assembler.

To by było na tyle
;-)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#9  2014-10-16 09:55:49

  misioooo - Członek DUG

misioooo
Członek DUG
Skąd: Wrocław
Zarejestrowany: 2006-06-10

Re: [SOLVED] Zapytania do bazy danych MySQL w PHP

[quote=Jacekalex]Takie rzeczy na dwóch tabelach robi się złączeniami wewnętrznymi lub zewnętrznymi, zainteresuj się, co robi w Mysql funkcja [b]JOIN[/b].
W każdym razie potrzebujesz tylko [b]jednego zapytania[/b], a nie dwóch.

Sznurek:
http://dev.mysql.com/doc/refman/5.0/en/join.html
http://webmaster.helion.pl/index.php/kursmysql-pobieranie-danych-z-wielu-tabel-i-laczenie-wynikow-zapytan[/quote]
Dziękuję :) Nie zajmuję się SQLem stąd moja niewiedza. Po poczytaniu odrobiny informacji odpowiedź okazała sie banalnie prosta ;P

Kod:

$results = $mysqli->query("SELECT name, start_time, end_time, room_id, room_name FROM mrbs_entry, mrbs_room WHERE start_time >= UNIX_TIMESTAMP()-21600 AND end_time >= UNIX_TIMESTAMP() AND mrbs_entry.room_id = mrbs_room.id ORDER BY start_time");

Takie coś zwraca mi to co chcę, ot tak po prostu.


[img]https://wiki.debian.org/DebianArt/Themes/Lines?action=AttachFile&do=get&target=banner.png[/img]

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)

[ Generated in 0.012 seconds, 11 queries executed ]

Informacje debugowania

Time (s) Query
0.00010 SET CHARSET latin2
0.00004 SET NAMES latin2
0.00182 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.17.75.138' WHERE u.id=1
0.00119 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.17.75.138', 1732816222)
0.00043 SELECT * FROM punbb_online WHERE logged<1732815922
0.00091 SELECT topic_id FROM punbb_posts WHERE id=277621
0.00008 SELECT id FROM punbb_posts WHERE topic_id=26560 ORDER BY posted
0.00100 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=26560 AND t.moved_to IS NULL
0.00010 SELECT search_for, replace_with FROM punbb_censoring
0.00202 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=26560 ORDER BY p.id LIMIT 0,25
0.00080 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=26560
Total query time: 0.00849 s