數據庫中,有一個名爲「數據包」表,該表中有像「ID」,「用戶ID」等,和一列名爲「用法」列(我知道它的名字很差,因爲用法是一個保留字,但遺憾的是我可能不會改變表中的任何內容),這個列的類型是3個值(「教育」,「學習」和「高級培訓」 )以「education」作爲默認值,值可以爲NULL。NULL插入與我一起工作的數據庫PDO
我寫了一個類包的getter/setter方法像set_usage($usage)/get_usage()
和類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);
so f阿,這麼好,一切工作正常。
現在,另一種使用情況「fullversion」應添加的,而是增加一個新值枚舉,他們決定使用NULL作爲它的完整版包使用的價值。現在我遇到了一個問題:當我嘗試使用$packet->set_usage(NULL)
來設置使用價值時,它將被解釋爲與未設置該值並且默認值(「education」)將在此情況下設置相同。我該怎麼辦?
如果值是'null',那麼對於'bindValue'或'bindParam'應該是'\ PDO :: PARAM_NULL'第三個參數。這意味着在將其添加到'bindParam'之前,您必須檢查該值。 –
INSERT INTO數據包(userId,number,...,'usage')'如果這是你使用'usage'列''引用的實際代碼,那麼你需要使用ticks \ ''。那些是兩種不同的動物,會引發語法錯誤。如果你正在使用蜱蟲,那麼你應該修改你的問題,以避免混淆那些可能認爲這是問題的人,並且可能想單獨發表一個答案。 –
@fred:是啊,我知道,我只是不知道如何逃生'這裏,編輯 – yangsunny