我想制作更新功能来更新数据库中的配置文件。现在我已经拥有了所有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
这可以吗?如果是这样的话?
答案 0 :(得分: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);
}
答案 1 :(得分: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']);
}
答案 2 :(得分: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)
}
答案 3 :(得分: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);