Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果某些值为空,则将$\u POST值插入MySQL表_Php_Mysql_Sql Insert - Fatal编程技术网

Php 如果某些值为空,则将$\u POST值插入MySQL表

Php 如果某些值为空,则将$\u POST值插入MySQL表,php,mysql,sql-insert,Php,Mysql,Sql Insert,我有(简而言之)这样的代码: ... mysql_query("INSERT INTO table1 (x,y,z) VALUES (".$_POST['a'].",".$_POST['b'].",\"".$_POST['c']."\")"); ... INSERT INTO table1 (x,y,z) VALUES (2,,""); mysql_query("INSERT INTO table1 (x,y,z) VALUES ('{$_POST['a']}', '{$_POST['b']

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

...
mysql_query("INSERT INTO table1 (x,y,z) VALUES (".$_POST['a'].",".$_POST['b'].",\"".$_POST['c']."\")");
...
INSERT INTO table1 (x,y,z) VALUES (2,,"");
mysql_query("INSERT INTO table1 (x,y,z) VALUES ('{$_POST['a']}', '{$_POST['b']}', '{$_POST['c']}')");
a
是数值,
b
是数值,但形式为空,
c
是字符串值,可以为空(没有问题)

t对于MySQL,它如下所示:

...
mysql_query("INSERT INTO table1 (x,y,z) VALUES (".$_POST['a'].",".$_POST['b'].",\"".$_POST['c']."\")");
...
INSERT INTO table1 (x,y,z) VALUES (2,,"");
mysql_query("INSERT INTO table1 (x,y,z) VALUES ('{$_POST['a']}', '{$_POST['b']}', '{$_POST['c']}')");
问题是值的一部分,它与
b
中的值完全不同。有什么办法让它工作吗?在数据库设置或PHP中。我有一个大表,不可能检查每个
$\u POST


感谢

只需测试
$\u POST['b']
值,如果为空或未设置,则将其替换为
null
(将解决方案调整为从表单中获得的
$\u POST['b']
的空值):


作为旁白,因为他们不赞成。使用或代替。

您可以这样使用查询:

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

如果任何post superglobal为空,则将传递

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

请不要忘记
mysql\u real\u escape\u string
mysql\u函数已被弃用。您应该在准备好的语句中使用MySQLi或PDO。不可能像
插入到表1(x,y,z)值(2,,“”)中那样保留它。
?我有很多列,如果不需要的话,我不想扩展代码。额外:转义输入-PDO::quote()-或者更好的,准备好的语句(这将同时消除您的问题)@koubin不,您不能,因为您不能将y值留空。您必须指定一些值,至少在数据库或查询中指定NULL.zeros而不是NULL?零在数据库中。在查询中有
我想可能是您对
x、y、z
字段使用了
数字数据类型(如整数),并且表结构中未选中
NULL
复选框。您能确认吗?是的,我使用过数字数据类型(tinyint…),但我以前在phpmyadmin中尝试过检查和取消检查NULL列。还是一样。但现在没关系了,因为我已经将所有类型转换为varchar。想一想,这不是问题。哦,很高兴知道你的问题解决了。如果我的回答帮助你考虑接受答案: