快速将空$ _POST数据更改为NULL

时间:2011-08-22 22:27:34

标签: php mysql

我目前有一个包含超过50个字段的表单,大约有20个可选字段。

是否有任何简单的方法可以在一次命中中处理$_POST数据以删除空字符串并在插入数据库之前将其更改为NULL,或者是否必须在以下方法中逐个完成它们:

if ($_POST['field_x'] == "") {
    $_POST['field_x'] = NULL;
}

7 个答案:

答案 0 :(得分:9)

您可以使用array_filter:

$post = array_filter($_POST);

http://php.net/manual/en/function.array-filter.php

  

如果没有提供回调,则将删除所有输入等于FALSE的条目(请参阅转换为布尔值)。

要删除空字符串,您可以使用:

function drop_empty($var)
{
  return ($var === '') ? NULL : $var;
}

$post = array_filter($_POST, 'drop_empty');

如果您不想删除值,但只想将它们设置为NULL:使用array_map

$post = array_map('drop_empty', $_POST);

答案 1 :(得分:4)

将所有空字符串元素设置为NULL:

foreach ($_POST as &$v) {
    if ($v !== "") {
        continue
    }
    $v = NULL;
}
unset($v); // remove the reference (alias) to the last element of $_POST

答案 2 :(得分:3)

这很简洁,但它也会删除POST值,如整数0或其他任何在转换为(bool)时评估为false的值

$_POST = array_filter($_POST);

如果这对您不起作用,您可以使用回调函数,使用===""进行比较

你还应该注意,这更像是调用unset()而不是将数组元素设置为NULL,这非常相似,可能对你的情况更好/甚至更好。

答案 3 :(得分:0)

(isset($_POST['x']) ? $_POST['x'] : NULL)

更简单的PDO绑定内联方法。 isset()是一个特殊的函数。您无法调用另一个函数,然后检查变量上的isset()。

示例:

$conn = new PDO($pdo_connection, $pdo_username, $pdo_password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);    
$stmt = $conn->prepare('SELECT * FROM `t` WHERE `x`=:x');
$stmt->bindValue(':x', (isset($_POST['x']) ? $_POST['x'] : NULL), PDO::PARAM_STR);
$stmt->execute();

答案 4 :(得分:0)

基于hakre的答案我的解决方案是:

model.fit_generator(batches, 
                 steps_per_epoch=steps_per_epoch, 
                 nb_epoch=1, 
                 validation_data=test_batches, 
                 nb_val_samples=test_batches.n)

之后我将这样的SQL命令连接起来:

foreach ($_POST as &$v) {
  $v = (is_numeric($v) ? $v : ($v === "" ? "NULL" : "'" . $v . "'"));
}
unset($v);

实际上我没有其他方法可以将所有emtpy $ _POST变量的NULL真正地转换为数据库字段。

答案 5 :(得分:0)

您可以执行以下操作:

foreach ($_POST as $k => $v) {
    if(empty($v) || $v === '') {
        $_POST[$k] = null;
    }
}

echo '<pre>';var_dump($_POST);echo '</pre>';

答案 6 :(得分:-1)

将$ _POST [&#39;数据&#39;]分配给变量,例如$ a = $ _ POST [&#39; data&#39;];在使用变量$ a之后,将其设为空,如$ a =&#34;&#34 ;;或$ a = null;