Autor Zpráva
Spacebar
Profil
Zdravím.
Můj kód funguje perfektně, chci se však zeptat, zda-li by nešel zapsat lépe. Vytváří dotaz pro MySQL na základě předaných argumentů:
<?php
function vytvorDotaz_update($tabulka,$data,$podminky) {
	$d = "UPDATE ".$tabulka." ";
	$dataDotaz;
	$dataDotazDocasny;
	$i;
	foreach ($data as $dataKlic) {
		$dataDotazDocasny[$i] = "SET ".$dataKlic[0]."=".$dataKlic[1];
		$i++;
	}
	$dataDotaz = implode(", ",$dataDotazDocasny);
	$d .= $dataDotaz . " ";
	$podminkyDotaz;
	$podminkyDotazDocasny;
	$ii;
	foreach ($podminky as $podminkyKlic) {
		$podminkyDotazDocasny[$ii] = "WHERE ".$podminkyKlic[0]."=".$podminkyKlic[1];
		$ii++;
	}
	$podminkyDotaz = implode(" AND ",$podminkyDotazDocasny);
	$d .= $podminkyDotaz;
	return $d;
}

$c;
$a;
$c[0][0] = "id";
$c[0][1] = 1568786;
$c[1][0] = "email";
$c[1][1] = "nekdo@nekde.com";
$a[0][0] = "expirace";
$a[0][1] = "25-02-2012";
$a[1][0] = "status";
$a[1][1] = "aktivni";
echo vytvorDotaz_update("uzivatele",$a,$c);
?>


Ten kód se mi nějak nelíbí, chtěl bych jej zapsat lépe ale nevím jak.
Díky za odpovědi :)
Spac.
Johnik
Profil
Třeba tohle by šlo lépe přes for:

for ($i = 0; $i < count($podminky) - 1; $i++)
{
  $podminkyDotazDocasny[$i] = "WHERE ".$podminky[0]."=".$podminky[1];
}


nebo jeste lépe:

$podminkyDotaz = "";
$podminkyDotazDocasny; = array();

foreach ($podminky as $podminkyKlic)
{
  array_push($podminkyDotazDocasny, "WHERE ".$podminkyKlic[0]."=".$podminkyKlic[1]);
}


A ještě bych psal alespoň základní hodnotu ke každé nově deklarované proměnné. Protože v tomhle se vyznat - který typ proměnné nacpat do funkce... Možná je to jen síla zvyku z jazyků, kde se typ musí deklarovat, ale příjde mi to rozhodně přehlednější.
larryx
Profil
používam niečo podobné
function updateQ($table = NULL, $params = array(), $cond = array(), $conf = FALSE) { 
      $sqlU = 'UPDATE '; 
      if($table == NULL) { 
        die('Error: First parameter -<b>Table name</b> cannot be empty for <b>updateQ</b> method'); 
      } 
      else { 
        $sqlU .= $table; 
      } 
       
      if(empty($params)) { 
        die('Error: Second parameter -<b>Params</b> cannot be empty for <b>updateQ</b> method'); 
      } 
      else { 
        $sqlU .= ' SET '; 
        $i = 1; 
        foreach($params as $key => $value) { 
          if($i++ == 1) { 
            $sqlU .= '`' . $key . '`=' . addslashes($value); 
          } 
          else { 
            $sqlU .= ', `' . $key . '`=' . addslashes($value); 
          } 
        } 
      } 
       
      if(!empty($cond)) { 
        $i = 1; 
        foreach($cond as $key => $value) { 
          if($i++ == 1) { 
            $sqlU .= ' WHERE `' . $key . '` = "' . addslashes($value) . '"'; 
          } 
          else { 
            $sqlU .= ' AND `' . $key . '` = "' . addslashes($value) . '"'; 
          } 
        } 
        return $sqlU; 
      } 
      else { 
        if($conf == TRUE) { 
          return $sqlU; 
        } 
        else { 
          die('Warning: No condition is specified. If you wish to update all records set 4th paramater for <b>updateQ</b> method to <b>TRUE</b>');
        } 
      } 
} 

a volanie potom vyzerá
echo $db->updateQ('tbl_test', array('a' => 1, 'b' => 2), array('x' => 32, 'y' => 43), FALSE); 
echo $db->updateQ('tbl_test', array('a' => 1, 'b' => 2), NULL, TRUE); 
Spacebar
Profil
Díky moc :)
Toto téma je uzamčeno. Odpověď nelze zaslat.