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

Php 如何阻止在MySQL中插入空字符串,php,mysql,sql,Php,Mysql,Sql,我有以下更新语句(PHP代码): 这将通过html表单更新一些MySQL表字段。例如,用户只想更改他的名字。他填写just name字段,然后按submit。数据与上面的UPDATE语句一起发送到表中 问题是,它还使用用户未完成的空白值更新表。我不希望添加空白值。 如何阻止空白值发送到表中? 如果您真的想在 Update 中这样做,您可以将 SET/COM>语句更改为: set utilizator = (case when '$utilizator' <> '' then '$ut

我有以下更新语句(PHP代码):

这将通过html表单更新一些MySQL表字段。例如,用户只想更改他的名字。他填写just name字段,然后按submit。数据与上面的UPDATE语句一起发送到表中

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


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

如果您真的想在<代码> Update <代码>中这样做,您可以将<代码> SET/COM>语句更改为:

set utilizator = (case when '$utilizator' <> '' then '$utilizator' else utilizator end),
    . . .
set utilizator=(当“$utilizator”和“$utilizator”结束时的情况),
. . .
如果新值为空,则将使用以前的值

您也可以在应用程序级别通过更新已更改的字段来实现这一点


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

如果您确实想在
更新中执行此操作,您可以将
set
语句更改为类似以下内容:

set utilizator = (case when '$utilizator' <> '' then '$utilizator' else utilizator end),
    . . .
set utilizator=(当“$utilizator”和“$utilizator”结束时的情况),
. . .
如果新值为空,则将使用以前的值

您也可以在应用程序级别通过更新已更改的字段来实现这一点


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

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

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

您可以做两件事来解决此问题。一种是在表单中预加载数据。因此,当用户更改其姓名时,其他字段已加载原始信息。
$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']."'";
}
第二个选项是基于具有值的字段创建更新查询

选项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>

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

选项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>

最好只更新已更改的值。过程是获取现有记录、检查已更改的值,然后仅更新已更改的值的好方法。或者,在PHP中,您可以选择现有记录,对照更新的值进行检查,并仅更新更改的值,在PHP中这样做会稍微增加开销。您最好使用完整性约束NOTNULL来实现此目的。您最好只更新已更改的值。过程是获取现有记录、检查已更改的值,然后仅更新已更改的值的好方法。或者,在PHP中,您可以选择现有记录,对照更新的值进行检查,并仅更新更改的值,在PHP中这样做会稍微增加开销。您可以更好地使用完整性约束NOTNULL来实现这一点。