4 回答

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊
如果您的錯(cuò)誤報(bào)告是在 E_ALL,您不應(yīng)該在查詢(xún)執(zhí)行時(shí)面臨靜默失敗......無(wú)論如何,首先,一些步驟可以解決故障點(diǎn)。
移出json_encode($this)
綁定,分配給一個(gè)變量,然后var_dump
查看您實(shí)際向綁定器提供的內(nèi)容。也是如此$this->LastUpdated->format
;?假設(shè)它是一個(gè) DateTime 對(duì)象,但誰(shuí)知道呢。當(dāng)失敗點(diǎn)在條件語(yǔ)句之外時(shí)更容易調(diào)試。
如果您改為插入虛擬數(shù)據(jù)字符串,您能否確認(rèn)它是否按預(yù)期工作?例如:
if($query->bind_param('ss',?'{}',?'2020-05-19?01:01:01'));?{
這里的一個(gè)問(wèn)題是bind_param通過(guò)引用而不是值來(lái)綁定變量。因此,您不能為其提供功能。您必須將值分配給變量,然后才綁定它們(因?yàn)楹瘮?shù)不返回可用的引用)。意思是,改為:
$json = json_encode($this);
$updated = $this->LastUpdated->format("Y-m-d H:i:s");
if($query->bind_param('ss', $json, $updated)) {
您可以將綁定結(jié)果 (true/false) 分配給一個(gè)變量,然后var_dump
.?(我們不想var_dump
從條件語(yǔ)句內(nèi)部,對(duì)嗎?)由于上述原因,綁定將失敗 === false。同樣,var_dump
準(zhǔn)備好的查詢(xún)確保它成功,跟蹤每個(gè)步驟。
數(shù)據(jù)庫(kù)引擎運(yùn)行可能會(huì)觸發(fā)致命錯(cuò)誤,這很可能與插入查詢(xún)的大小有關(guān)。您可能需要查看 MariaDB 錯(cuò)誤日志以獲取更多線(xiàn)索,以防您在某處遇到限制。我猜想max_allowed_packet,默認(rèn) 16MB,你已經(jīng)完成了。(另見(jiàn)mysqli_stmt::send_long_data以塊形式發(fā)送長(zhǎng)數(shù)據(jù)。)
在其他問(wèn)題中,json
是 MySQL 8.0 中的保留字(未針對(duì) Maria 10.4 列出??。?。您可能希望重命名該列以確保它不會(huì)成為問(wèn)題(即使它在這里有效)。
就這種情況的可能性而言,您所描述的內(nèi)容(if/else 沒(méi)有輸出)只有在從未顯示過(guò)的致命錯(cuò)誤觸發(fā)時(shí)才有意義$query->execute()
。除非在某些 MySQL 故障的 PHP 錯(cuò)誤報(bào)告中存在錯(cuò)誤。對(duì)您的 PHP 錯(cuò)誤報(bào)告配置進(jìn)行三次檢查,包括 code/.htaccess 中可能覆蓋 php.ini 的任何地方。

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超10個(gè)贊
檢查設(shè)置max_allowed_packet
;這可能會(huì)阻止你。設(shè)置為 1G。
如果這不起作用,則可能存在超時(shí)問(wèn)題或其他一些大小限制。
對(duì)于大文本字符串,我有時(shí)喜歡壓縮它們,并將字符串存儲(chǔ)到一個(gè)MEDIUMBLOB
.

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個(gè)贊
您使用什么數(shù)據(jù)類(lèi)型來(lái)存儲(chǔ) 36MB 的 JSON 字符串?您可能需要將數(shù)據(jù)類(lèi)型更改為最多可存儲(chǔ) 4GB 數(shù)據(jù)的 LONGTEXT 或最多可存儲(chǔ) 1GB 數(shù)據(jù)的 JSON 數(shù)據(jù)類(lèi)型
或者
您可以將其單獨(dú)存儲(chǔ)為表中的列,并在需要時(shí)在您的代碼中將其更改回 JSON

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊
嘗試檢查是否準(zhǔn)備好
if($query = $conn->prepare("INSERT INTO actionplansummarydata_new (json, last_updated) VALUES (?, ?)")){
$query->bind_param('ss', json_encode($this), $this->LastUpdated->format("Y-m-d H:i:s"));
if($query->execute()){
// code here
}
}
- 4 回答
- 0 關(guān)注
- 202 瀏覽
添加回答
舉報(bào)