我将首先解释我的最终目标,因为可能有更好的解决方案。
我有一个名为updateUser
的函数,它接受以下参数:
function updateUser($password = NULL, $name = NULL, $lastname = NULL, $age = NULL, $email = NULL, $relation = NULL)
正如您所看到的,我已将它们设置为NULL,因此如果它们未通过该函数,则它们将变为空白。对? (我希望我做对了)
问题是每个参数(传递的)都包含将要发送到数据库的用户的信息,我只想在查询中包含传递的变量,因为我不想设置数据库中未传递给(空白)的那些。
所以我提出了将所有传递的参数都推到一个数组中的想法。然后循环遍历数组中的每个项目并生成如下字符串:
$string = "$password, $email";
那么,有什么建议吗?正如我所说,如果有另一种更好的方法来解决这个问题,我不必使用这种方法。
先谢谢!
答案 0 :(得分:1)
使用函数call_user_func()(php.net docs),您可以调用数据库INSERT或UPDATE命令,具体取决于传递给函数的数据。
例如:
function updateUser($password = NULL, $name = NULL, $lastname = NULL,
$age = NULL, $email = NULL, $relation = NULL)
{
$array = array();
// Create an array with indices of passed parameters:
if($password !== NULL) // !== to check for NULL and not empty string.
$array["password"] = $password;
if($name !== NULL)
$array["name"] = $name;
// etc...
call_user_func("addToDb", $array);
}
function addToDb($detailsArray)
{
foreach($detailsArray as $detail)
{
// Add $detail's key with $detail's value to database.
}
}
答案 1 :(得分:1)
如果您只传递一个包含应更新的属性/值对的数组,我想它会更灵活:
function updateUser($props) {
$names = array('password', 'name', 'lastname', 'age', 'email', 'relation');
$arr = array();
for ($names as $name) {
if (isset($props[$names])) {
$arr = "$name = '".mysql_real_escape_string($props[$names]).'"';
}
}
if (!empty($arr)) {
$query = "UPDATE … SET ".implode(',', $arr);
}
}
然后使用具有应更新属性的数组调用此函数:
updateUser(array('name'=>'User A', 'password'=>'secret'))
答案 2 :(得分:0)
获取所有参数并过滤掉不是字符串的变量。
$arguments = func_get_args();
array_filter($arguments, 'is_string');
//$arguments will be an array with numeric indices
答案 3 :(得分:0)
我认为问题在于您可能无法正确调用该函数。当你这样做时:
updateUser('pass', 'user', '', '', 'user@example.com');
<$> $ lastname和$ age的值不是null,而是空字符串。但如果你这样称呼它:
updateUser('pass', 'user', null, null, 'user@example.com');
它们将保持为空。