在做一個(gè)物聯(lián)網(wǎng)設(shè)備連接并通過認(rèn)證后,更改狀態(tài)為1,關(guān)閉連接后更改狀態(tài)為0,但實(shí)際上0無法寫入數(shù)據(jù)表,寫進(jìn)去的一直是1,好崩潰。。。
最開始我用的enum類型,并且設(shè)置默認(rèn)值為0,代表設(shè)備默認(rèn)離線
`state` enum('0','1') NOT NULL DEFAULT '0' COMMENT '狀態(tài):0離線、1在線',
可是試了很多遍,關(guān)閉連接后還是1,但是如果同時(shí)更新其他字段時(shí),別的字段沒事,當(dāng)然同樣不能為0。
我以為是默認(rèn)值的事,后來把默認(rèn)值去掉,測試還是如此。
再后來當(dāng)設(shè)備斷開連接時(shí),我更新其他數(shù)據(jù)類型為 varchar 的字段,值為0,這時(shí)候才發(fā)現(xiàn),數(shù)據(jù)庫里面居然是1,這是啥情況啊,不給用0了嗎?
self::$db->update('devices')->cols([
'state' => '0',
'location' => '0'
])->where([
'device_id' => $_SESSION['client_id']
])->query();
windows10
mysql8
在網(wǎng)上查到mysql8有保存0的問題,試了解決辦法也不行
干脆卸載重新安裝了5.7的,但是試了也是不行,真的是撞見鬼了。。。
后來用on/off來代替值,可是還是有這樣的問題,似乎并不更新這個(gè)字段,難道這個(gè)state字段在搞特殊?
最后,無奈,用最原始的方法測試,沒想到解決了。。。
/**
* 當(dāng)用戶斷開連接時(shí)觸發(fā)
* @param int $client_id 連接id
*/
public static function onClose($client_id)
{
//設(shè)備下線
if (!isset($_SESSION['client_id'])) return;
echo '設(shè)備下線' . "\r\n";
// self::$db->update('devices')->cols([
// 'state' => 'off'
// ])->where([
// 'device_id' => $_SESSION['client_id']
// ])->query();
self::$db->query("UPDATE `devices` SET `state` = '0' WHERE device_id = '{$_SESSION['client_id']}'");
unset($_SESSION['client_id']);
}
反正我到現(xiàn)在也沒搞懂這是為啥,但是總感覺是哪里有問題。。。