【问题标题】:PHP/MYSQL UPDATE only if value is not null仅当值不为空时才更新 PHP/MYSQL
【发布时间】:2013-03-09 15:32:53
【问题描述】:

我正在构建一个表单来更新多列数据。出于我的目的,此代码已部分成功。剩下要做的就是为更新查询包含(如果 IS NOT NULL)。我不知道该怎么做。

换句话说,我只希望在 $_POST 值不为空的情况下执行 UPDATE。

<form>
<input type='text' name='input1' />
<input type='text' name='input2' />
<input type='text' name='input3' />
<input type='submit' value='submit' />
</form>

<?php
//db connect

$1=$_POST['input1'];
$2=$_POST['input2'];
$3=$_POST['input3'];

mysql_query("UPDATE table
             SET a = $1
                 b = $2
                 c = $3
             WHERE row = 'row_id");

);


?>

提前感谢您的帮助。

(为了让您免于额外输入,我的原始代码会转义字符,因此不需要 SQL 注入警告。我也在熟悉“mysqli_query”,因此也无需对此发表评论.)

【问题讨论】:

    标签: php mysql forms


    【解决方案1】:

    您可以使用COALESCE

           UPDATE table
             SET a = COALESCE($1, a),
                 b = COALESCE($2, b),
                 c = COALESCE($3, c)
             WHERE row = ''
    

    【讨论】:

      【解决方案2】:
      COALESCE
      

      是解决方案。它类似于 Oracle 的 NVL。 您可以使用参数在准备好的语句中使用它,如下所示

      UPDATE
          tbl_cccustomerinfo
      SET
          customerAddress = COALESCE(?,customerAddress),
          customerName =  COALESCE(?,customerName),
          description =  COALESCE(?,description)
      WHERE
          contactNumber=?
      

      【讨论】:

        【解决方案3】:

        结合

        COALESCE 是最好的选择。

        含义: COALESCE(a,b) 仅表示 PUT a,但如果 a 为 NULL(在您的情况下不是 POSTED/PUT),则将其替换为 b.

         `mysql_query("UPDATE table
                 SET a =COALESCE($1,a)
                     b = COALESCE($2,b)
                     c = COALESCE($3,c)
                 WHERE row = 'row_id")`
        

        【讨论】:

          【解决方案4】:
          if(!empty($_POST['input1'])){ ...mysql query.. }
          

          【讨论】:

            【解决方案5】:
            <?php
            $query="UPDATE table SET"
            $query.=(!empty($_POST['input1']))? "a=$1,":"";
            $query.=(!empty($_POST['input2']))? "b=$2,":"";
            $query.=(!empty($_POST['input3']))? "c=$3,":"";
            $query=substr($query,0,-1);
            $query.="WHERE row = 'row_id'"
            mysql_query($query);
            ?>
            

            【讨论】:

              【解决方案6】:

              试试这个:

              $updateList = array();
              if(!empty($_POST['input1'])) {
                  $updateList[] = 'a = '.$_POST['input1'];
              }
              
              //Do it for every input...
              
              if(!empty($updateList)) {
                  $sql = 'UPDATE table SET '.implode(', ', $updateList).' WHERE row = 1';
              }
              

              请注意,我没有转义/引用任何内容,因为您说您知道该怎么做。

              【讨论】:

                【解决方案7】:

                只需将它们组成一个数组即可。像这样:

                if(empty($_POST['input1']) && empty($_POST['input2']) && empty($_POST['input3'])) {
                   return false;
                  } else {
                   $updates = array();
                
                   if(!empty($_POST['input1'])) 
                     $updates[] = 'a='".$_POST['input1']."';
                
                   if(!empty($_POST['input2'])) 
                    $updates[] = 'b='".$_POST['input2']."';
                
                   if(!empty($_POST['input3'])) 
                    $updates[] = 'c='".$_POST['input3']."';
                
                
                        $query = "UPDATE table SET".$updates."WHERE row_id=''";
                        $sth = $sth->connect->prepare($query);
                        $sth->execute();
                
                        ));
                   }
                

                【讨论】:

                  【解决方案8】:

                  尝试使用简单的代码

                  $1  =   isset($_POST['input1'])? $_POST['input1'] : 'a';
                  $2  =   isset($_POST['input2'] ? $_POST['input2'] : 'b';
                  $3  =   isset($_POST['input3'] ? $_POST['input3'] : 'c';
                  
                  
                  if(count($_POST) > 0){
                  
                      mysql_query("UPDATE table
                                   SET a = $1
                                       b = $2
                                       c = $3
                                   WHERE row = 'row_id");
                  
                      );
                  }
                  

                  【讨论】:

                  • 注意:如果任何一个值不为空而另一个为空,它将更新。
                  猜你喜欢
                  • 1970-01-01
                  • 2021-08-16
                  • 2014-05-31
                  • 2018-01-15
                  • 2016-04-30
                  • 1970-01-01
                  • 2021-09-07
                  • 1970-01-01
                  • 2018-09-08
                  相关资源
                  最近更新 更多