繁体   English   中英

使用pdo将NULL插入数据库

[英]Insert NULL into database with pdo

在我正在使用的数据库中,有一个名为“ packets”的表,此表中有诸如“ id”,“ userid”等列和名为“ usage”的列(我知道其名称选择不当,原因是用法是保留字,但可惜我不能更改表中的任何内容),此列的类型为具有3个值(“教育”,“学习”和“高级培训”)的枚举,其中“教育”为默认值并且该值可以为NULL。

我写了一个类,它带有诸如set_usage($usage)/get_usage()类的getter / setter方法,以及一个Packet_dao类,用于使用pdo访问数据库:

class Packet_dao {
    private m_insert_query;
    ...
    public function persist($data)
    {
        $query = $this->m_insert_query;
        try
        {
           $stmt = $this->bind_param($data, $query);
           $stmt->execute();
           return true;
        }
        catch (PDOException $ex)
        {
           $this->m_error_message = $ex->getMessage();
           return false;
        }
    }

    private function bind_param($packet, $query)
    {
       $stmt = $this->m_pdo->prepare($query);
       $stmt->bindParam(':userId', $packet->get_user_id());
       ...
       $stmt->bindParam(':usage', $packet->get_usage());
       return $stmt;
    }

插入查询看起来像

INSERT INTO packets (userId, number, ..., `usage`) 
VALUES (:userId, Coalesce(:number, default(number)), Coalesce(:usage, default(`usage`)))

因此,如果我想向db中添加数据包,代码将如下所示:

$packet = new Packet();
$packet_dao = new Packet_dao();
$packet->set_stuff("stuff");
$packet_dao->persist($packet);

到目前为止,一切都很好。

现在,应该添加另一个用例“ fullversion”,并且他们决定将NULL用作完整版数据包的使用值,而不是向枚举添加新值。 现在我遇到一个问题:当我尝试使用$packet->set_usage(NULL)设置使用价值时,它将被解释为与未设置该值相同,并且默认值为(“ education”)为在这种情况下设置。 我该怎么办?

显然,合并的第二个参数(),迫使其采取的默认值时,没有设置(或NULL),我改后Coalesce(:usage, default(usage)):usage 有效

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM