当前位置: 首页 > 知识库问答 >
问题:

如何在SQL查询中提供条件?

宇文学博
2023-03-14

我正在尝试更新数据库表。如果表单中的密码为空,我如何通过提供一个条件来防止表单中的密码(“memberpassword”,$pass)被sql代码更新?有可能吗?

   //database connection
        $SQL = "mysql:host=" . $this->MYSQL_HOST . ";dbname=" . $this->MYSQL_DB;

        try {
            $this->pdo = new \PDO($SQL, $this->MYSQL_USER, $this->MYSQL_PASS);
            $this->pdo->exec("SET NAMES'" . $this->CHARSET . "'COLLATE'" . $this->COLLATION . "'");
            $this->pdo->exec("SET CHARACTER SET'" . $this->CHARSET . "'");
            $this->pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
            $this->pdo->setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_OBJ);

            
        } catch (PDOException $e) {
            die( $e->getMessage());
        }
    }
    //Connect DB END

    private function myQuery($query, $params = null)
        {
            if (is_null($params)) {
                $this->stmt = $this->pdo->query($query);
            } else {
                $this->stmt = $this->pdo->prepare($query);
                $this->stmt->execute($params);
            }
            return $this->stmt;
        }
    
    
        public function Update($query, $params = null)
            {
                try {
                    return $this->myQuery($query, $params)->rowCount();
                } catch (PDOException $e) {
                    die($e->getMessage());
                }
            }
    
    
            
            $update = $db->Update("UPDATE members SET
            MemberUsername=?,
            MemberPassword=?,
            MemberEmail=?,
            MemberName=?,
            MemberLastName=?,
            MemberBirthday=?,
            MemberAge=?,
            MemberGender=?,
            CityID=?
            WHERE MemberID=?
            ", array($username, $pass, $email, $name, $lastname, $birthday, $age, $gender, $city, $memberID));

共有1个答案

毋琪
2023-03-14

您可以轻松地使用IFNULL(expr1、expr2):

IFNULL返回expr1,如果它们不为null,则返回expr2

$update = $db->Update("UPDATE members SET
            MemberUsername=?,
            MemberPassword=IFNULL(?,MemberPassword),
            MemberEmail=?,
            MemberName=?,
            MemberLastName=?,
            MemberBirthday=?,
            MemberAge=?,
            MemberGender=?,
            CityID=?
            WHERE MemberID=?
            ", array($username, $pass, $email, $name, $lastname, $birthday, $age, $gender, $city, $memberID));
 类似资料:
  • 问题内容: 我有一个使用条件api动态组合在一起的hibernate查询。如果按原样执行,它将生成令人难以忍受的缓慢查询。 但是我已经注意到,如果我在查询前加上/ * + FIRST_ROWS(10)* /,它们的速度大约要快1000%。我该如何使用标准API? 我试过criteria.setComment(..),但这似乎被忽略了。 在hibernate文档中,3.4.1.7。提到了查询提示,但

  • 问题内容: 假设我有一个名为“ Company”的表,其中包含CompanyID关键字。还有另一个名为“ CompanyAddress”的相关表,该表具有CompanyID外键,因此可以轻松地建立联接。 该CompanyAddress表可以具有给定公司的多个地址,例如AddressType = 1或AddressType = 2 用于获取字段的联接等是微不足道的,但是我需要一个条件,在该条件下查询

  • 问题内容: 我有一个使用条件api动态组合在一起的休眠查询。如果按原样执行,它将生成令人难以忍受的缓慢查询。 但是我已经注意到,如果我在查询前加上/ * + FIRST_ROWS(10)* /,它们的速度大约要快1000%。我该如何使用标准API? 我试过criteria.setComment(..),但这似乎被忽略了。 在休眠文档中3.4.1.7。提到了查询提示,但明确指出:“请注意,这些不是S

  • 问题内容: 我有PostgreSQL数据库,我尝试打印所有用户(人)。 当我执行此查询时 我得到所有车主按汽车数量排序 输出: 当我尝试链接所有者ID时,所有订单都出错了。 输出:和其他数据 你看比命令是错误的。所以这是我的问题,我该如何保存该订单? 问题答案: 解开混乱。先汇总,然后再加入: 无需加入两次。如果您计数 最多或所有行, 这应该是最快的。 对于 较小的选择 , 相关子查询 更快: 至

  • 问题内容: 所以我想要实现的是与每个索引的自定义可搜索字段部分匹配。我生成一个带有要搜索的值的值,如果该值不止一个单词,则每个单词又生成另一个值(我可以使用,但它有错误,或者具有未记录的设置)。 在这种情况下,我正在寻找;查询如下所示: 我的目标搜索是获取首先具有的结果,然后搜索just 或。 此示例返回4个具有的结果,然后是仅具有的结果,然后是个更多的结果。 如何提高具有完整搜索值的结果?(“电

  • 问题内容: 我有如下查询 我想以某种方式重用 我简化了上面的查询,但是实际上上面的选择是巨大而复杂的。我不想负担确保两者同步 我没有任何以编程方式重用它的方法。排除了T-SQL。我只能写简单的查询。这是应用程序的限制。 有没有一种方法可以在单个语句中重用相同的子查询 问题答案: 如果您使用的是SQL Server 2005+,请使用公用表表达式(CTE):