使用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
值。这就是我遇到的问题。
我确保将数据库表设置为;
我用于处理表单提交的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
任何建议都值得赞赏。
答案 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语句中的值的集合,将执行得更快!