Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]UPDATE i SELECT oraz zamykanie bazy
lepmajster
post 21.11.2010, 12:59:12
Post #1





Grupa: Zarejestrowani
Postów: 129
Pomógł: 24
Dołączył: 21.05.2010

Ostrzeżenie: (30%)
XX---


Witam
Mam dwa pytania, bo chce w miare zoptymalizowac sobie zapytania do bazy, aby nie robic zbednych zapytan.

1. Czy robiac zapytanie UPDATE mozna odrazu pobrac dane (cos w stylu SELECT)?
2. Jak zamknac polaczenie z baza, gdy lacze sie z nia za pomoca funkcji:
  1. function polaczSQL($dbname){
  2. $dbhost = "localhost";
  3. $dbuser = "root";
  4. $dbpass = "***";
  5. $dbc = mysql_connect($dbhost, $dbuser, $dbpass);
  6. mysql_select_db ($dbname);
  7. mysql_query("SET NAMES 'utf8'");
  8. }

Gdy zrobie mysql_close($dbc), poza ta funkcja, to chyba uchwyt $dbc nie bedzie ustawiony, bo ta zmienna jest lokalna (tylko wewnatrz funkcji).

EDIT: Jeszcze trzecie pytanko (wybaczcie, ale dawno sie SQL nie bawilem)

3. Jak pobrac pojedynczy rekord z bazy sql? Bo mysql_fetch_array() zwraca nam tablice z cala zawartoscia bazy, a mozna pobrac tylko pojedynczy rekord?
Pozdrawiam

Ten post edytował lepmajster 21.11.2010, 13:05:55


--------------------
Naciśnij POMÓGŁ, jeśli mój post był pomocny :)
Go to the top of the page
+Quote Post
daros17
post 21.11.2010, 13:04:38
Post #2





Grupa: Zarejestrowani
Postów: 233
Pomógł: 27
Dołączył: 27.08.2007

Ostrzeżenie: (0%)
-----


Z tego co wiem to nie możesz wykonać dwóch zapytań jednocześnie.

Go to the top of the page
+Quote Post
sadistic_son
post 21.11.2010, 13:34:47
Post #3





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Pobranie tylko jednegj komorki:
  1. $rekord=mysql_result(mysql_query("SELECT name FROM tabela WHERE id=2"),0);

Do pobrania tylko jednego rekordu, mimo iz wiecej spelnia zapytanie uzyj LIMIT 1 np:
  1. SELECT name FROM tabela WHERE id>20 LIMIT 1

Do zamkniecia polaczenia zrob po prostu mysql_close();

Ten post edytował sadistic_son 21.11.2010, 13:37:11


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
lepmajster
post 21.11.2010, 14:05:27
Post #4





Grupa: Zarejestrowani
Postów: 129
Pomógł: 24
Dołączył: 21.05.2010

Ostrzeżenie: (30%)
XX---


Dzieki za pomoc smile.gif

Cytat(daros17 @ 21.11.2010, 13:04:38 ) *
Z tego co wiem to nie możesz wykonać dwóch zapytań jednocześnie.

Jestes pewien?
Bo mi sie wydaje, ze gdzies tutaj byl temat z UPDATE, gdzie w jednym zapytaniu robiono update i pobierano dane - ale nie moge znalesc :/


Cytat(sadistic_son @ 21.11.2010, 13:34:47 ) *
Pobranie tylko jednegj komorki:
  1. $rekord=mysql_result(mysql_query("SELECT name FROM tabela WHERE id=2"),0);

Do pobrania tylko jednego rekordu, mimo iz wiecej spelnia zapytanie uzyj LIMIT 1 np:
  1. SELECT name FROM tabela WHERE id>20 LIMIT 1

Do zamkniecia polaczenia zrob po prostu mysql_close();

Cos mi z tym mysql_result() nie wychodzi, ciagle mam NULL zwracane :/
  1. $zapytanie = "SELECT * FORM `users` WHERE `ID`='10' LIMIT 1";
  2. $dane = mysql_result(mysql_query($zapytanie), 0);
  3. var_dump($dane);

Cos robie zle?


--------------------
Naciśnij POMÓGŁ, jeśli mój post był pomocny :)
Go to the top of the page
+Quote Post
modern-web
post 21.11.2010, 14:15:33
Post #5





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

Ostrzeżenie: (0%)
-----


  1. $zapytanie = "SELECT * FORM `users` WHERE `ID`='10' LIMIT 1";
  2. $dane = mysql_result(mysql_query($zapytanie), 0);
  3. var_dump($dane);


Nie SELECT * FORM tylko SELECT * FROM smile.gif


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post
lepmajster
post 21.11.2010, 14:23:55
Post #6





Grupa: Zarejestrowani
Postów: 129
Pomógł: 24
Dołączył: 21.05.2010

Ostrzeżenie: (30%)
XX---


Cytat(modern-web @ 21.11.2010, 14:15:33 ) *
  1. $zapytanie = "SELECT * FORM `users` WHERE `ID`='10' LIMIT 1";
  2. $dane = mysql_result(mysql_query($zapytanie), 0);
  3. var_dump($dane);


Nie SELECT * FORM tylko SELECT * FROM smile.gif

Dzieki, wlasnie tez przed chwila zauwazylem - ale gafa (FORM biggrin.gif )
Do tego usawilem dla body background-color: black;, a nie zmienilem koloru czcionek, wiec nawet nie widzialem komunikatu o bledzie biggrin.gif
Chyba jeszcze po sobocie nie doszedlem do siebie winksmiley.jpg


--------------------
Naciśnij POMÓGŁ, jeśli mój post był pomocny :)
Go to the top of the page
+Quote Post
modern-web
post 21.11.2010, 14:33:46
Post #7





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

Ostrzeżenie: (0%)
-----


Tak to już jest winksmiley.jpg
Każdemu może się zdarzyć - szczególnie po tak udanej nocy (jak się domyślam) biggrin.gif

Pozdrawiam.


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post
lepmajster
post 21.11.2010, 14:35:01
Post #8





Grupa: Zarejestrowani
Postów: 129
Pomógł: 24
Dołączył: 21.05.2010

Ostrzeżenie: (30%)
XX---


EDIT:
To jeszcze jedno pytanie.
mysql_result() zwraca tylko jeden rekord z danego wiersza?
Nie da sie zrobic tak, aby zwracalo caly wiersz w tablicy, czy po prostu do tego uzyc mysql_fetch_array(), ale bez petli while?


--------------------
Naciśnij POMÓGŁ, jeśli mój post był pomocny :)
Go to the top of the page
+Quote Post
modern-web
post 21.11.2010, 14:39:20
Post #9





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

Ostrzeżenie: (0%)
-----


Zrób coś w ten deseń:

  1. $query = mysql_query("SELECT * FROM x WHERE x = '$x' ORDER BY x ASC LIMIT 0,1");
  2. while($rekord = mysql_fetch_array($query))
  3. {
  4. $wynik .= '
  5. '.$rekord[0].'
  6. '.$rekord[1].'
  7. '.$rekord[2].'
  8. '.$rekord[3].'
  9. '.$rekord[4].'
  10. ';
  11. }


Pamiętaj, że rekordy zliczane są od 0 (nie od 1) smile.gif

P.S. lepiej użyj pętli smile.gif

Ten post edytował modern-web 21.11.2010, 14:45:49


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post
lepmajster
post 21.11.2010, 14:45:07
Post #10





Grupa: Zarejestrowani
Postów: 129
Pomógł: 24
Dołączył: 21.05.2010

Ostrzeżenie: (30%)
XX---


Ja myslalem nad takim czyms:
  1. $query = mysql_query("SELECT * FROM `users` WHERE `ID`='10'");
  2. $dane = mysql_fetch_array($query); // bez WHILE, poniewaz wiem, ze bede mial zwrocony tylko 1 wiersz
  3. echo $dane['imie'].$dane['nazwisko'].$dane['mail'];

Ale nie wiem, czy jest to poprawne zastosowanie tej funkcji mysql_fetch_array() i czy do takich rzeczy, nie ma czegos "lepszego".
Pozdrawiam


--------------------
Naciśnij POMÓGŁ, jeśli mój post był pomocny :)
Go to the top of the page
+Quote Post
modern-web
post 21.11.2010, 14:47:47
Post #11





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

Ostrzeżenie: (0%)
-----


Z tego co wyczytałem w manualu Twoje zastosowanie tej funkcji jest jak najbardziej poprawne smile.gif

Nie przychodzi mi do głowy inne rozwiązanie...

Ten post edytował modern-web 21.11.2010, 14:50:29


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 02:05