PHP检查函数参数和设置空如果为空

问题描述 投票:1回答:2

我有一个PHP函数,通过Web表单接受一些(很多)参数。

是否可以检查这些参数是否为空,如果是,请将这些参数设置为null值?我知道可能有更有效的方法来实现我正在做的事情,但我如何继续我目前的代码呢?

而不是像我下面的示例代码那样单独检查每一个,是否有更有效的方法?

public function test ($param1, $param2, $param3, $param4, $param5, $param6, $param7, ... ) {
        $param1 = ($param1 != '') ? $param1 : NULL;
        $param2 = ($param2 != '') ? $param2 : NULL;
        $param3 = ($param3 != '') ? $param3 : NULL;
        $param4 = ($param4 != '') ? $param4 : NULL;
        $param5 = ($param5 != '') ? $param5 : NULL;
        $param6 = ($param6 != '') ? $param6 : NULL;
        $param7 = ($param7 != '') ? $param7 : NULL;
        // etc
    }

然后我使用预准备语句将这些值发送到mysql数据库。

php mysql function prepared-statement
2个回答
0
投票

我喜欢使用关联数组而不是单个变量。关联数组将字符串键映射到值。

我最终将这个关联数组传递给PDOStatement::execute()方法,作为预处理语句的参数。这意味着必须存在所有键,并且只存在预准备语句中指定的键。

所以我需要我的param数组都填充默认值,如果它们不在数组中,我需要它被截断以删除不需要的元素。

public function fillAndTruncate($params, $paramDefaults) {
  $params = array_merge($paramDefaults, array_intersect_key($params, $paramDefaults));
  return $params;
}

我可能会像这样使用这个函数:

$paramDefaults = [
  'name'    => NULL,
  'phone'   => NULL,
  'age'     => 0,
  'country' => 'USA'
];

$sql = 'INSERT INTO mytable SET name = :name, phone = :phone, age = :age, country = :country';
$stmt = $pdo->prepare($sql);
$stmt->execute(fillAndTruncate($_POST, $paramDefaults));

0
投票

如果将params加载到单个变量中,则可以执行简单的foreach,并且不需要像在问题中那样使用else,因为只有在值为空时才更改值。

您的表单和它的输入看起来像这样:

<form action="action-calling-your-function.php" method="post">
    <input type="text" name="params[]" />
    <input type="text" name="params[]" />
</form>

该函数可能如下所示:

public function test ($params) {
    foreach ($params as $param) {
        if (empty($param))
            $param = NULL;
    }
}

注意:我还使用了包含所需的empty()值的''函数,但其​​他值将返回true。 Here is the documentation

© www.soinside.com 2019 - 2024. All rights reserved.