2010. február 17., szerda

BLOB típusú mező olvasása/írása

Néha - különösen akkor ha sikerül php kóddal kinyírni egy view-ban a teljes weboldalunkat :-) - előfordulhat, hogy módosítani szeretnénk egy BLOB típusú mező tartalmát az adatbázisban...
(például a views_display táblában valamelyik display_options mezőt). Ilyenkor az a teendő, hogy valamilyen módon kiolvassuk a módosítandó adathalmazt az adatbázisból, "kicsomagoljuk", elvégezzük a szükséges módosításokat rajta, "becsomagoljuk", majd végül visszamásoljuk az eredeti helyére. Drupal esetében mindezt legkönnyebben egy modulból tehetjük meg. Az alábbi kódrészlet bár nem tökéletes, mégis jól szemléltei, hogyan lehet megbírkózni a feladattal.

BLOB típusú mező tartalmának kiolvasása az adatbázisból:
//Tábla adatainak kigyűjtése az adatbázisból
$result = db_query("select * from views_display");
while ($row = db_fetch_array($result))
 {
  //a megfelelő oszlop (display_options) elemeinek kicsomagolása
  $arr = unserialize($row['display_options']);


Adat módosítás:
//A megfelelő érték módosítása a kapott tömbben
  if (isset($arr['arguments']['tid']['default_argument_php']))
  {
   $arr['arguments']['tid']['default_argument_php'] = array();

Módosított adatok visszaírása az adatbázisba a megfeleő helyre BLOB formátumban:
   $q = "UPDATE views_display SET display_options = '" . mysql_real_escape_string(serialize($arr)) . "' WHERE vid = 1 AND id = 'block_4'";

   //Query lefuttatása
   $a = db_query($q);
  }
 }

2 megjegyzés:

. írta...

Szép, szép! Csak az a kár, hogy nem igen értem. Hol találok kicsit bővebb magyarázatot erre? :-)

Apa54 írta...

Laci betyárnak: Mi már nyugodjunk bele, hogy tudatlanul hallunk meg. Azt hogy ezt értsed, újból kéne születni. Mondom én az 56 évemmel.

Megjegyzés küldése