我有(简而言之)这样的代码:
...
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。