| Autor | Zpráva | ||
|---|---|---|---|
| Spacebar Profil |
#1 · Zasláno: 5. 4. 2010, 16:51:08 · Upravil/a: Spacebar
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 |
#2 · Zasláno: 5. 4. 2010, 17:22:33
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 |
#3 · Zasláno: 6. 4. 2010, 14:40:43
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 |
#4 · Zasláno: 6. 4. 2010, 14:40:47
Díky moc :)
|
||
|
Časová prodleva: 16 let
|
|||
Toto téma je uzamčeno. Odpověď nelze zaslat.
0