我想制作一个更新函数来更新数据库中的配置文件。现在我有了所有的20个字段,想做一个功能,当我可以说什么数据我发送它。
示例:
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
这会是吗?如果是,如何?
考虑使用数组:
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);
}
在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']);
}
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)
}
您可以通过在声明中定义值来使用函数中的默认参数,但据我所知,您不能"跳过"参数,比如当您有队列$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