Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Pobranie jednego parametru z komórki
Forum PHP.pl > Forum > Przedszkole
php11
Cześć,

komórki tabeli zawierają parametry. Wygląda to tak:

  1. {"parametr1":"wartosc1","parametr2":"","parametr3":"","parametr4":"wartosc4"}


Nie potrafię pobrać wartości konkretnego parametru :-)
Marzę, by móc zmienić wartość danego parametru dla wielu wierszy w tabeli ;-)


Z góry dziękuję za pomoc :-)
Pyton_000
to jest json

maryaan
  1. <?php
  2.  
  3.  
  4. $dane_z_bazy = '{"parametr1":"wartosc1","parametr2":"","parametr3":"","parametr4":"wartosc4"}';
  5.  
  6. $obiekt = json_decode($dane_z_bazy);
  7.  
  8. $obiekt->parametr2 = 'nowa_wartosc';
  9.  
  10. $dane_do_bazy = json_encode($obiekt);
  11.  
  12. ?>


smile.gif
php11
Bardzo dziękuję za odpowiedzi.
Posiedziałem nad tym i potrafię już odczytać ;-) , ale nie udaje mi się zapisać zmian.

  1. $wynik = mysqli_query($baza,"SELECT * FROM `tabela` WHERE 1 ORDER BY `id` DESC");
  2. while($row = mysqli_fetch_array($wynik)) {
  3. $moje=json_decode($row['komorka']);
  4. echo $row[id] .' - '. $moje->parametr1 .'<br>';
  5. $moje->parametr1 = 'nowaWartosc';
  6. $moje=json_encode($row['komorka']);
  7.  
  8. //poniżej źle
  9. mysqli_query($baza,"UPDATE `tabela` SET `komorka` = `.$moje.`");
  10.  
kapslokk
Nazwy tabeli i komórek możesz brać w ` ale do wartości musisz używać ' albo "
php11
Dzięki, ale jak zmieniłem na

  1. mysqli_query($baza,"UPDATE `tabela` SET `komorka` = ".$moje."");


wyczyściło mi wszytko w komórkach ;-)
kapslokk
var_dump($moje); i sprawdz co Ci sie tam wyswietla. Dodatkowo wiesz, że update bez warunku zaktualizuje wszystkie rekordy w tabeli? No i jeszcze weź pod uwage ze jak masz string w " i chcesz w nim miec " to musisz dodac backslasha przed tym drugim ".
php11
Cytat
Dodatkowo wiesz, że update bez warunku zaktualizuje wszystkie rekordy w tabeli?

Tak, dzięki
Cytat
No i jeszcze weź pod uwage ze jak masz string w " i chcesz w nim miec " to musisz dodac backslasha przed tym drugim ".

Ok


  1.  
  2. $wynik = mysqli_query($baza,"SELECT * FROM `tabela` WHERE 1 ORDER BY `id` DESC");
  3. while($row = mysqli_fetch_array($wynik)) {
  4. $moje=json_decode($row['komorka']);
  5. // 1
  6. var_dump($moje);
  7.  
  8. $moje->parametr1 = 'nowaWartosc';
  9. $moje=json_encode($row['komorka']);
  10.  
  11. //2
  12. var_dump($moje);




1 var_dump zwraca: object(stdClass)#3 (8) { ["parametr1"]=> string(0) "" ["parametr2"]=> string(0) "" ["parametr3"]=> string(13) "wwwwwwwwwwwww"

2: string(220) ""{\"parametr1\":\"\",\"parametr2\":\"\",\"parametr2\":\"wwwwwwwwwwwww\"

Wychodzi na to, że źle przypisuję nową wartość.

Niestety nie wiem, jak to poprawnie zrobić :-)
maryaan
Zakręciłeś się jak ruski słoik biggrin.gif

Cytat(php11 @ 24.02.2017, 16:39:12 ) *
  1.  
  2. $wynik = mysqli_query($baza,"SELECT * FROM `tabela` WHERE 1 ORDER BY `id` DESC");
  3. while($row = mysqli_fetch_array($wynik)) { // pobierasz wiersz, ok
  4. $moje=json_decode($row['komorka']); // $moje zawiera zdekodowany obiekt json
  5. // 1
  6. var_dump($moje);
  7.  
  8. $moje->parametr1 = 'nowaWartosc'; //zmieniasz parametr obiektu $moje
  9. $moje=json_encode($row['komorka']); // a tu jedziesz funkcją encode po komórce z bazy zamiast po obiekcie $moje :)
  10.  
  11. //2
  12. var_dump($moje);

php11
Dzięki, ruszyłem nakrętkę ;-)
Jednak to nie koniec...

var_dump($moje) zwraca teraz
  1. "{"parametr1":"nowaWartosc"}"


Jak zrobić UPDATE bazy, by zaktualizować wszystkie wartości parametr1?
viking
Poczytaj może trochę dokumentację https://dev.mysql.com/doc/refman/5.7/en/json.html
json_replace.
maryaan
Taki kod:
  1. $row['komorka'] = '{"parametr1":"wartosc1","parametr2":"","parametr3":"wwwwwwwwwwwww"}';
  2.  
  3. echo $row['komorka'];
  4. $moje = json_decode($row['komorka']);
  5.  
  6. var_dump($moje);
  7.  
  8. $moje->parametr1 = "nalesnik";
  9. $moje->parametr2 = "wiadro";
  10.  
  11. var_dump($moje);
  12.  
  13. $d = json_encode($moje);
  14.  
  15. echo $d;

daje w rezultacie
Kod
{"parametr1":"wartosc1","parametr2":"","parametr3":"wwwwwwwwwwwww"}
object(stdClass)[1]
  public 'parametr1' => string 'wartosc1' (length=8)
  public 'parametr2' => string '' (length=0)
  public 'parametr3' => string 'wwwwwwwwwwwww' (length=13)
object(stdClass)[1]
  public 'parametr1' => string 'nalesnik' (length=8)
  public 'parametr2' => string 'wiadro' (length=6)
  public 'parametr3' => string 'wwwwwwwwwwwww' (length=13)
{"parametr1":"nalesnik","parametr2":"wiadro","parametr3":"wwwwwwwwwwwww"}


wystarczy zrobić update'a w rekordzie bazy danych uwzględniając id mielonego rekordu smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.