簡體   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