亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

mysqli_fetch_assoc()期望參數1為mysqli_result或如何獲取MySQLi

mysqli_fetch_assoc()期望參數1為mysqli_result或如何獲取MySQLi

www說 2019-05-20 16:17:40
在我的本地/開發環境中,MySQLi查詢執行正常。但是,當我在我的Web主機環境中上傳它時,我收到此錯誤:這是代碼:global $mysqli;$stmt = $mysqli->prepare("SELECT id, description FROM tbl_page_answer_category WHERE cur_own_id = ?");$stmt->bind_param('i', $cur_id);$stmt->execute();$stmt->bind_result($uid, $desc);為了檢查我的查詢,我試圖通過控制面板phpMyAdmin執行查詢,結果是OK。
查看完整描述

1 回答

?
一只萌萌小番薯

TA貢獻1795條經驗 獲得超7個贊

有時您的查詢失敗,您不知道原因。因此,配置PHP和mysqli以報告每個錯誤非常重要。

如何在mysqli中獲取錯誤消息

首先,MySQLi在所有環境中連接之前總是有這條線:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

之后,所有MySQL錯誤都將轉移到PHP異常中。反過來,未捕獲的異常會導致PHP致命錯誤。因此,如果出現MySQL錯誤,您將收到傳統的PHP錯誤。這將立即讓您意識到錯誤原因。堆棧跟蹤將引導您到達發生錯誤的確切位置。

如何在不同的環境中配置PHP

以下是我關于PHP錯誤報告的文章的要點:
請注意,您必須能夠查看PHP錯誤。這確實是不同環境的問題:

您必須將相應的配置選項設置為以下值

  • 在開發服務器上

    • error_reporting應該設置為E_ALL值;

    • display_errors 應設為1

  • 在生產服務器上

    • error_reporting應該設置為E_ALL值;

    • display_errors 應設為0

    • log_errors 應設為1

如何實際使用它?

只是刪除了錯誤手動檢查任何代碼,所有這些or die(),if ($result)和這樣的。只需立即編寫數據庫交互代碼即可

$stmt = $this->con->prepare("INSERT INTO table(name, quantity) VALUES (?,?)");$stmt->bind_param("si", $name, $quantity);$stmt->execute();

再次,witohut周圍的任何條件。如果發生錯誤,則會將其視為代碼中的任何其他錯誤。例如,在開發PC上,它只會出現在屏幕上。對于實時網站,您將需要一個錯誤包裝,但這是一個不同的故事,與mysqli及其錯誤完全無關。

如何處理您收到的錯誤消息

收到錯誤消息后,您必須閱讀并理解它。這聽起來太明顯了,但學習者經常忽略錯誤信息的極端有用性。但大多數時候它解釋這個問題非常簡單。比如,如果它說特定表不存在,則必須檢查拼寫,拼寫錯誤,字母大小寫,憑證等?;蛘撸绻fSQL語法中存在錯誤,那么您必須檢查SQL。問題點就在錯誤消息中引用的查詢部分之前。

您還必須信任該錯誤消息。如果它說令牌的數量與綁定變量的數量不匹配那么它就是這樣。缺席的表或列也是如此。鑒于選擇,無論是你自己的錯誤還是錯誤信息是錯誤的,總是堅持前者。它再次聽起來居高臨下,但在這個網站上的數百個問題證明這個建議非常有用。

關于錯誤報告的不應該做的清單

  • 使用錯誤抑制運算符(@

  • 使用die()echo或任何其他功能無條件地在屏幕上打印錯誤消息。PHP可以很好地回應它,不需要任何幫助。

  • 手動測試查詢結果(如if($result))只是沒有意義。您的查詢失敗并且您已經獲得了錯誤異常,或者它沒有問題,也沒有什么可以測試的。

  • 使用try..catch回顯錯誤消息。PHP可以做得更好,更好。


查看完整回答
反對 回復 2019-05-20
  • 1 回答
  • 0 關注
  • 1452 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號