4 回答

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

TA貢獻1796條經驗 獲得超10個贊
檢查設置max_allowed_packet
;這可能會阻止你。設置為 1G。
如果這不起作用,則可能存在超時問題或其他一些大小限制。
對于大文本字符串,我有時喜歡壓縮它們,并將字符串存儲到一個MEDIUMBLOB
.

TA貢獻1829條經驗 獲得超6個贊
您使用什么數據類型來存儲 36MB 的 JSON 字符串?您可能需要將數據類型更改為最多可存儲 4GB 數據的 LONGTEXT 或最多可存儲 1GB 數據的 JSON 數據類型
或者
您可以將其單獨存儲為表中的列,并在需要時在您的代碼中將其更改回 JSON

TA貢獻1805條經驗 獲得超9個贊
嘗試檢查是否準備好
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 關注
- 188 瀏覽
添加回答
舉報