我有(简而言之)这样的代码:
...
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
值。
感谢
答案 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因为它们已被弃用。请改用PDO或MSQLi。
答案 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。