仅当值不为空mySQL时才更新

时间:2014-12-15 12:40:36

标签: php mysql

我正在进行更新查询,其中值只应在值不为null或为空时更新。现在它更新所有内容,无论价值如何请帮我解决这个问题。

$query = "UPDATE bundels 
SET batchkosten = CASE WHEN  ". $_POST['batchkosten'] . " IS NOT NULL
                   THEN  ". $_POST['batchkosten'] . "
                   ELSE batchkosten
              END CASE,
              CASE WHEN   ". $_POST['maandelijkse_kosten'] . "  IS NOT NULL
                   THEN   ". $_POST['maandelijkse_kosten'] . " 
                   ELSE maandelijkse_kosten
              END CASE,
              CASE WHEN   ". $_POST['aanmeldkosten'] . "  IS NOT NULL
                   THEN   ". $_POST['aanmeldkosten'] . " 
                   ELSE aanmeldkosten
              END CASE,
              CASE WHEN   ". $_POST['transactiekosten'] . "  IS NOT NULL
                   THEN   ". $_POST['transactiekosten'] . " 
                   ELSE transactiekosten
              END CASE,
              CASE WHEN   ". $_POST['referral'] . "  IS NOT NULL
                   THEN   ". $_POST['referral'] . " 
                   ELSE referral
              END CASE,
              CASE WHEN   ". $_POST['actief'] . "  IS NOT NULL
                   THEN   ". $_POST['actief'] . " 
                   ELSE actief
              END CASE
              WHERE bundel_id = ". $_POST['bundel_id'] . "";
        $result = mysql_query($query, $db) or die ('FOUT: werkt niet'); 
            header ("Location: vergelijker_bewerken.php");
        } else {
            $bundels = mysql_query("SELECT bundels.psp_id, psp.psp_id, psp_naam, bundels.bundel_id, batchkosten, maandelijkse_kosten, aanmeldkosten, transactiekosten, referral, actief from bundels
                                    JOIN psp
                                ON psp.psp_id = bundels.psp_ID"); 
}

3 个答案:

答案 0 :(得分:5)

  1. 使用准备好的语句来逃避用户输入并避免SQL语法错误和SQL注入。
  2. 您可以使用case

    UPDATE bundels 
    SET batchkosten = case when ? is not null and length(?) > 0
                           then ?
                           else batchkosten
                      end,
    ...
    
  3. 您当前的查询转换为(实际应该抛出错误)

    UPDATE bundels 
    SET batchkosten = CASE WHEN ? length(?) > 0 
                           THEN ?
                           ELSE batchkosten 
                      END 
    WHERE bundel_id = ? 
    

    但请改用:

    SET batchkosten = CASE WHEN ? is not null and length(?) > 0 
    

答案 1 :(得分:0)

将查询更改为此

$query= "UPDATE bundels SET
batchkosten =                ' ". $_POST['batchkosten'] . " ',
maandelijkse_kosten =        ' ". $_POST['maandelijkse_kosten'] . " ',
aanmeldkosten =              ' ". $_POST['aanmeldkosten'] . " ',
transactiekosten =           ' ". $_POST['transactiekosten'] . " ',
referral =                   ' ". $_POST['referral'] . " ',
actief =                     ' ". $_POST['actief'] . " '
WHERE bundel_id = ". $_POST['bundel_id'] . " ".
"and your_attribut is not null and your_attribut != ''";

不要忘记更改“your_attribut”。

答案 2 :(得分:0)

你可以像这样写一些脚本:

$query = "Update bundels SET ";
$columns = array( "batchkosten", 
                  "maandelijkse_kosten", 
                  "aanmeldkosten",    
                  "transactiekosten", 
                  "referral", 
                  "actief");

foreach($columns as $column){
    if(isset($_POST[$column]) && !empty($_POST[$column])){
        $query .= $column . " = " $_POST[$column] . " ";            
    }
}

$query .= " WHERE bundel_id = " . $_POST['bundel_id'];