为动态输入数组插入空值

时间:2018-10-10 10:54:04

标签: php html mysql arrays mariadb

使用PHP版本7.1.9,MariaDB 10.1.26。

我正在向MySQL数据库提交一系列表单数据。该表单允许添加动态输入,添加动态输入后,它们看起来像这样;

// I have removed additional html form code for brevity
<input type="text" name="mac[]">
<input type="text" name="mac[]">
<input type="text" name="mac[]">
etc...

有时这些输入将为空,这是允许的。当输入为空时,我想在数据库中插入一个NULL值。这就是我遇到的问题。

我确保将数据库表设置为;

  • 允许null =是
  • 默认-空

我用于处理表单提交的PHP代码在下面(请忽略所有安全漏洞,这是简化代码);

// I have removed additional php code for brevity
$arr_mac = $_POST['mac'] ? "'".$_POST['mac']."'" : 'NULL';
for ($i = 0; $i < count($arr_mac); $i++) {
    $sql = "INSERT INTO staff (mac) VALUES ( ".$arr_mac[$i]." )
}

我收到的错误是;

  

SQLSTATE [42000]:语法错误或访问冲突:1064您有一个   您的SQL语法错误;检查与您的手册相对应的手册   正确语法的MySQL服务器版本.. ..

当我var_dump(mac)得到时;

[mac] => Array
  (
    [0] =>
    [1] => 
    [2] =>  
  )

如果我在插入中将PHP更改为以下内容(请注意附加的' '),则查询将成功运行,,而不是null值,{{1 }}值插入数据库中。

empty

任何建议都值得赞赏。

2 个答案:

答案 0 :(得分:1)

我假设您使用错误的语法构建查询。使用给定的代码,您的INSERT可能看起来像这样:

INSERT INTO staff (mac) VALUES ()

您的代码无法正确处理NULL的情况-将变量设置为NULL不会导致使用文字NULL来构建查询。

这可能会有所帮助:

$arr_mac = $_POST['mac'] ? "'".$_POST['mac']."'" : 'NULL';
for ($i = 0; $i < count($arr_mac); $i++) {
    $value = $arr_mac[$i];
    if(!$value) {
        $value = 'NULL';
    } else {
        $value = your_favorite_escaping_algorithm($value);
    }
    $sql = "INSERT INTO staff (mac) VALUES ( ". $value ." )";
}

这有助于写出语法正确的查询所需要的特定NULL

答案 1 :(得分:0)

$arr_mac = $_POST['mac'] ;
$batchInsert = array();
for ($i = 0; $i < count($arr_mac); $i++) {
    if( "" == trim($arr_mac[$i])) {
        $arr_mac[$i] = 'NULL';
    }
       $batchInsert = array_push($arr_mac[$i]);
}
$insertValues = implode("','", $batchInsert)
$sql = "INSERT INTO staff (mac) VALUES ('$batchInsert')";

***检查'和,使用爆破功能形成

这将插入N号。单个INSERT语句中的值的集合,将执行得更快!