如何阻止在MySQL中插入空字符串

时间:2014-09-24 11:05:33

标签: php mysql sql

我有这个更新语句(PHP代码):

$sql1="UPDATE `utilizatori` " .
    "SET utilizator='$utilizator', parola='$parola1', nume='$nume', " .
    "`prenume='$prenume', varsta='$varsta', localitate='$localitate'` ";

WHERE parola='".$_SESSION['parola']."'";

这将通过html表单更新一些MySQL表字段。例如,用户想要改变他的名字。他完成了名称字段,然后按下提交。使用上面的UPDATE语句将数据发送到表中。

问题是它还使用用户未完成的空白值更新表。我不希望添加空白值。

如何阻止发送到表格中的空白值?

4 个答案:

答案 0 :(得分:2)

如果您真的想在update中执行此操作,可以将set语句更改为:

set utilizator = (case when '$utilizator' <> '' then '$utilizator' else utilizator end),
    . . .

如果新值为空,则使用前一个值。

您也可以通过更新已更改的字段在应用程序级别执行此操作。

并且,您应该使用参数化查询,而不是直接将值替换为字符串。不过这是另一个问题。

答案 1 :(得分:1)

$updateClauseArr = Array();
foreach($_REQUEST as $key => $val){
   if(is_numeric($val)){
      $updateClauseArr[] = '$key = '.(int) $val;
   }else{
      $updateClauseArr[] = "$key = '".htmlentities($val,ENT_QUOTES,'UTF-8')."'";
   }
}
if(sizeof($updateClauseArr) > 0){
   $updateSet = implode(',' ,$updateClauseArr);
   $sql1="UPDATE `utilizatori` SET ".$updateSet." WHERE parola='".$_SESSION['parola']."'";
}

答案 2 :(得分:1)

您可以做两件事来解决这个问题。一种是预加载表单中的数据。因此,当用户更改其名称时,其他字段已经加载了原始信息。 第二个选项是根据具有值的字段创建更新查询。

选项1的示例:

<?php

    //
    //GET THE DATA FROM A SELECT QUERY HERE
    //FOR EXAMPLE:  $sql = "SELECT * FROM `utilizatori` WHERE parola='".$_SESSION['parola']."'";
    //Put the data of the sql row in a variable e.g. $sqlRow.


?>

<!--Use variable in your form!-->
<form>
    ...
    ...
    <input name="nume" value="<?=$sqlRow['nume']?>"/>
    <input name="utilizator" value="<?=$sqlRow['utilizator']?>"/>
    ...
    ...
</form>

选项2的示例:

<?php
    //Catch post data
    if($_POST)
    {
        $updateString = "";
        foreach($_POST as $inputField => $inputValue)
        {
            if($inputValue != "")
            {
                $updateString .= $inputField." = '".$utilizator."',";
            }
        }

        //Strip last , 
        $updateString = substr($updateString,0,-1);

        if($updateString != "")
        {
            //Your query would be
            $sql1 = "UPDATE `utilizatori` SET ".$updateString." WHERE parola='".$_SESSION['parola']."'";
        }
    }
?>

答案 3 :(得分:0)

查看用户提交的字段值。然后循环迭代有值的字段,使变量连接到更新查询。