PHP MYSQL - >如果该变量不为null或为空,则使用变量UPDATE列

时间:2017-03-22 12:13:49

标签: php mysql

抱歉,我是PHP的新手,所以我看起来像个菜鸟。

正如标题所说,我制作了这种更新用户数据的方法:

function update($userid, $name){
Try{

    $stmt=$this->db->prepare("UPDATE users
                          SET 
                          name=:name,
                          WHERE userid=:userid");
    $stmt->execute(array(':name'=>$name));

   } Catch(PDOException $e){
     echo $e->getMessage();
  }
  }

该代码工作正常,但我想知道是否可能,“name”列只是更新,如果变量来自:

$user->update($userid, $name);

来自$ name,不为null或不为空。如果它为null或Empty,则不应该执行MYSQL UPDATE函数。

1 个答案:

答案 0 :(得分:3)

试试这个。

function update($userid, $name) {
    try {
           if (!empty($name) and !empty($userid)) {
           $stmt = $this->db->prepare("UPDATE users
                                    SET 
                                    name=:name
                                    WHERE userid=:userid");
           $stmt->execute(array(':name' => $name, ':userid' => $userid));
           }
    }
    Catch(PDOException $e) {
        echo $e->getMessage();
    }
}

解释

  1. 删除尾随逗号。 正如@Fred -ii所述 - 在SET之后的SQL查询中有一个尾随逗号(即SET name=:name,)。
    SQL查询中的逗号用于将多个更新彼此分开,以便UPDATE table SET col1 = "val1", col2 = "val2"等等。由于您只更新了一列,因此不需要逗号
  2. empty方法检查变量$name是否已设置且不为false。见documentation
  3. 删除了SQL-Injection-Vulnerable in:userid = $ userid
  4. 为什么我认为在函数

    中包含if语句会更好
    1. 一个函数应该是可重用的,并且不需要调用函数
    2. 在干净的代码中,你应该避免使用if语句,这意味着,在调用一个可以在代码的其他部分调用的函数之前,你不应该总是包含一个if-statment。添加其他参数会发生什么?
    3. 我知道这是可以讨论的。