2014-04-15 143 views
-1

我想創建一個更新函數來更新我的數據庫中的配置文件。現在我擁有全部20個字段,並且希望能夠提供一個功能,讓我可以說出我發送的數據。PHP函數變量參數

例子:

function send_data($a, $b, $c, $d, $e, $id){ 
    $sql = "UPDATE table SET a=$a, b=$b, c=$c, d=$d, e=$e WHERE id = $id"; 
    mysql_query($sql); 
} 

現在我想調用該函數和例如只給A和d

能這樣?如果是的話如何?

回答

4

考慮使用的數組:

function send_data($data, $id) { 
    $build = array(); 
    foreach($data as $k=>$v) { 
     $build[] = "`".$k."` = '".mysql_real_escape_string($v)."'"; 
    } 
    $sql = "UPDATE `table` SET ".implode(", ",$build)." WHERE `id`=".intval($id); 
    mysql_query($sql); 
} 
+2

等待,'mysql_'? –

+0

@AlmaDo顯然。 –

+0

@AlmaDo不是? –

0

它是在PHP可能有默認參數,例如:

function send_data($a, $b = 5, $c = 6, $d = "foo") 

然後可以通過僅指定參數沒有被調用默認值,所以這個函數可以用1-4個參數調用。問題在於你仍然需要在正確的位置提供參數,所以你不能只指定$a$d。例如,以下所有條件都有效

send_data(5);     // Actually send_data(5, 5, 6, "foo"); 
send_data(5, 3);     // Actually send_data(5, 3, 6, "foo"); 
send_data(5, 1, 9);    // Actually send_data(5, 3, 9, "foo"); 
send_data(5, 1, 9, "bar");  // Actually send_data(5, 3, 9, "bar"); 

PHP不支持關鍵字參數要麼,所以另一種方式是在一個數組來傳遞,例如:

function send_data($args) { 
    do_something_with($args['a']); 
} 
0
function send_data($setData) 
    { 
    $setVals = array(); 
    foreach($setData as $field => $val) 
    { 
     $value  = mysql_real_escape_string($val); 
     $setVals[] = $field . "='{$value}'"; 
    } 

    $setString = implode(', ', $setVals); 

    mysql_query('UPDATE table SET ' . $setString) 
    } 
0

可以使用通過定義聲明中的值來確定函數中的默認參數,但據我所知,不能「跳過」參數,比如當你有隊列$ a,$ b,$ c時,你不能調用函數myfunction(valueforA ,valueforC)。你必須從開始到最後一個你想要設置的每一個參數都給出。像myfunction(valueforA,NULL,ValueforC);

在你的情況,你可以使用以下命令:

function send_data($a=NULL, $b=NULL, $c=NULL, $d=NULL, $e=NULL, $id=NULL){ 
    $sql = "UPDATE table SET a=$a, b=$b, c=$c, d=$d, e=$e WHERE id = $id"; 
    mysql_query($sql); 

,並使用它像

send_data(1, 2, NULL, NULL, NULL, 5); 

http://www.php.net/manual/en/functions.arguments.php