如果MySQL表中的$_POST值为空,请将其插入


INSERT $_POST values into MySQL table if some are empty

我有(简而言之)这样的代码:

...
mysql_query("INSERT INTO table1 (x,y,z) VALUES (".$_POST['a'].",".$_POST['b'].",'"".$_POST['c']."'")");
...

a是数值,b是数值但形式为空,c是字符串值,可以为空(没有问题)。

然后对于MySQL,它看起来是这样的:

INSERT INTO table1 (x,y,z) VALUES (2,,"");

问题是值的一部分,其中与b中完全不同。有什么解决方案可以让它发挥作用吗?在数据库设置中,或在PHP中。我有一个大表,不可能检查每个$_POST值。

感谢

您可以这样使用查询:

mysql_query("INSERT INTO table1 (x,y,z) VALUES ('{$_POST['a']}', '{$_POST['b']}', '{$_POST['c']}')");

如果任何后超全局为空,则传递''

只测试$_POST['b']值,如果为空或未设置,则用null替换它(使解决方案适应您从表单中获得的$_POST['b']的空值):

mysql_query("INSERT INTO table1 (x,y,z)
    VALUES (".$_POST['a'].",".((isset($_POST['b']) || $_POST['b']=="") ? $_POST['b'] : "NULL").",'"".$_POST['c']."'")");

顺便说一句,不要使用mysql_*扩展,因为它们已被弃用。请改用PDO或MSQLi。

您可以使用insert into set并有条件地创建查询:

$sql = "INSERT INTO table1 set ";
$sql.= "x = '".mysql_real_escape_string(htmlentities($_POST['a']))."' ";
if (isset($_POST['b']) && ($_POST['b'] != '')){
    $sql.= ", y = '".mysql_real_escape_string(htmlentities($_POST['b']))."' ";
}
if (isset($_POST['c']) && ($_POST['c'] != '')){
    $sql.= ", z = '".mysql_real_escape_string(htmlentities($_POST['c']))."' ";
}
mysql_query($sql);

此外,正如其他人所指出的那样,尝试使用mysqli或PDO。