0

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

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

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

Tthen 对于 MySQL,它看起来像这样:

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

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

谢谢

4

3 回答 3

2

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

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

''如果任何 post superglobal 为空,则将通过。

于 2013-07-25T16:14:10.880 回答
0

只需测试$_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_* 扩展,因为它们已被弃用。请改用PDOMSQLi

于 2013-07-25T16:04:19.537 回答
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。

于 2013-07-25T16:15:25.310 回答