php - 在 DB 上插入 NULL 值(方法)

标签 php mysql sql

更新----

使用此方法后:

                        foreach($_POST as $k => $v) { 
  $params[] = empty($v)? "NULL":$v;
} 

$params_string_values = "'" . implode("','",$params) . "'";
$param_name_list = "tu_id,tu_status,tu_name,tu_fk_tt_id,tu_mon_1_s,tu_mon_1_e,tu_mon_2_s,tu_mon_2_e,tu_mon_3_s,tu_mon_3_e,tu_tue_1_s,tu_tue_1_e,tu_tue_2_s,tu_tue_2_e,tu_tue_3_s,tu_tue_3_e,tu_wed_1_s,tu_wed_1_e,tu_wed_2_s,tu_wed_2_e,tu_wed_3_s,tu_wed_3_e,tu_thu_1_s,tu_thu_1_e,tu_thu_2_s,tu_thu_2_e,tu_thu_3_s,tu_thu_3_e,tu_fri_1_s,tu_fri_1_e,tu_fri_2_s,tu_fri_2_e,tu_fri_3_s,tu_fri_3_e,tu_sat_1_s,tu_sat_1_e,tu_sat_2_s,tu_sat_2_e,tu_sat_3_s,tu_sat_3_e,tu_sun_1_s,tu_sun_1_e,tu_sun_2_s,tu_sun_2_e,tu_sun_3_s,tu_sun_3_e";
$param_values = "'','1',{$params_string_values}";

$insert_query = mysql_query("INSERT into turn_conf( {$param_name_list} ) values ({$param_values})");

它创建了一个看起来有效的查询(我在这里粘贴了它),但是没有 NULL 值存储在数据库中,所有 NULL 值都以“00:00”的形式进入数据库:

INSERT into turn_conf( tu_id,tu_status,tu_name,tu_fk_tt_id,tu_mon_1_s,tu_mon_1_e,tu_mon_2_s,tu_mon_2_e,tu_mon_3_s,tu_mon_3_e,tu_tue_1_s,tu_tue_1_e,tu_tue_2_s,tu_tue_2_e,tu_tue_3_s,tu_tue_3_e,tu_wed_1_s,tu_wed_1_e,tu_wed_2_s,tu_wed_2_e,tu_wed_3_s,tu_wed_3_e,tu_thu_1_s,tu_thu_1_e,tu_thu_2_s,tu_thu_2_e,tu_thu_3_s,tu_thu_3_e,tu_fri_1_s,tu_fri_1_e,tu_fri_2_s,tu_fri_2_e,tu_fri_3_s,tu_fri_3_e,tu_sat_1_s,tu_sat_1_e,tu_sat_2_s,tu_sat_2_e,tu_sat_3_s,tu_sat_3_e,tu_sun_1_s,tu_sun_1_e,tu_sun_2_s,tu_sun_2_e,tu_sun_3_s,tu_sun_3_e ) values ('','1','12345555','1','10:00','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL')

这是它在 DB 上记录的内容:

record



我有这个查询,其中有时变量 '$va1''$val2''$val3' 没有值:

$insert = mysql_query("INSERT INTO turn_conf (tu_id,value1,value2,value3) VALUES ('','$va1','$val2','$val3')") or die (mysql_error());

如果这些变量中的任何一个都没有存储值,则必须将与其相关的任何内容发送到数据库(以便在数据库上存储 NULL 值),例如如果只有 '$val1' 存储信息,最终查询必须是:

$insert = mysql_query("INSERT INTO turn_conf (tu_id,value1) VALUES ('','$va1')") or die (mysql_error());

为了解决这个问题,我为每个变量创建了一个结构,检查它是否存储了一些东西,如果没有,就什么都不声明也不发送:

if ($_POST['value1'] == ""){
    $val1_p = "";
    $val1_s = ""; 
}else {
    $val1_p = ",value1";
    $val1_sv = $_POST['value1'];
    $val1_s = ", '$val1_sv'" ;}  

if ($_POST['value2'] == ""){
    $val2_p = "";
    $val2_s = ""; 
}else {
    $val2_p = ",value2";
    $val2_sv = $_POST['value2'];
    $val2_s = ", '$val2_sv'" ;}  

if ($_POST['value3'] == ""){
    $val3_p = "";
    $val3_s = ""; 
}else {
    $val3_p = ",value3";
    $val3_sv = $_POST['value3'];
    $val3_s = ", '$val3_sv'" ;}   

和:

$insert = mysql_query("INSERT INTO turn_conf (tu_id $val1_p $val2_p $val3_p) VALUES ('' $val1_s $val2_s $val3_s)") or die (mysql_error());

这行得通,并创建了正确的查询,但我想知道您是否觉得这个方法合适,或者是否选择另一个更有效的方法会更好。请不要在这个例子中我只使用了 3 个变量,但是这个真实的查询有 43 个变量,我因为数据量而提出这个问题。

最佳答案

$insert = mysql_query("INSERT INTO turn_conf (tu_id,value1,value2,value3) VALUES ('','".((isset($va1))?"'".$va1."'":"NULL")."','".((isset($va2))?"'".$va2."'":"NULL")."','".((isset($va3))?"'".$va3."'":"NULL")."')") or die (mysql_error());

基本上您想要测试该值是否已设置。我们为此使用简短的 if 符号:

isset($va1)?"'".$va1."'":"NULL"

如果设置了 $va1(有值),我们将在查询中放入“'value'”,否则为空值的“NULL”。

如果你也想测试一个空字符串:

(isset($va1) && $va1 != '')?"'".$va1."'":"NULL"

关于php - 在 DB 上插入 NULL 值(方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23490883/

相关文章:

php - Laravel 5.6 试图获取非对象的属性

PHP-Soap 传递方法参数

php - 从元素名称和属性名称中包含带冒号前缀的 XML 中读取属性值

php - 如何从数据库中的多个用户表发送多封邮件(php + mysql + cronjob)?

java - JSP中IF语句执行错误

sql - 从众多 Excel 文件中提取到一个数据表或文件

php - 将字符串的一部分与其他字符串的一部分进行匹配

php - 为什么 XMLReader 重复 mysql insert function inside while 并且不能停止?

sql - 确定夏令时是否有效?数据库服务器

非唯一列上的 SQL Server 聚集索引