如果某些值为空,则将$ _POST值插入MySQL表中

时间:2013-07-25 16:01:20

标签: php mysql sql-insert

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

...
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值。

感谢

3 个答案:

答案 0 :(得分:2)

您可以像这样使用您的查询:

mysql_query("INSERT INTO table1 (x,y,z) VALUES ('{$_POST['a']}', '{$_POST['b']}', '{$_POST['c']}')");
如果任何后超级全局为空,

''将被传递。

答案 1 :(得分:0)

只测试$_POST['b']值,如果为空或未设置,则将其替换为null(将解决方案调整为您从表单中获取的$_POST['b']的空值):< / p>

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

另外,don't use mysql_* extension因为它们已被弃用。请改用PDOMSQLi

答案 2 :(得分:0)

您可以使用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。