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

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

我們應該在哪里使用 fetch_assoc 方法?

我們應該在哪里使用 fetch_assoc 方法?

PHP
手掌心 2023-07-08 22:08:37
我開始了這個小博客項目,我認為我犯了一個錯誤,因為沒有包含fetch_assoc方法。這是代碼:$data = new database();$sql = "SELECT * FROM post "; $article = $data->select($sql); foreach ($article as  $value) : ?> <div class="blog-post"><h2 class="blog-post-title"><?= $value["blog_title"]; ?></h2>這就是 select 方法的樣子:public function select($sql){     $result = $this->con->query($sql) or die($this->con->error.__LINE__);     if ($result->num_rows > 0) {        return $result;     }else {       return false;     }}我想知道為什么它對我有用(博客的標題顯示正確),盡管我忘記了方法fetch_assoc?
查看完整描述

1 回答

?
守著星空守著你

TA貢獻1799條經驗 獲得超8個贊

fetch_assoc()大部分時間你不需要使用。如果您正在圍繞 mysqli 編寫某種抽象類,那么您永遠不需要直接使用任何 mysqli 函數。

mysqli:query()返回一個mysqli_result可迭代類型的對象。這意味著您可以使用foreach循環來迭代它。

我需要指出的是,您仍然遵循一些不良的編程實踐。你永遠不應該使用or die($this->con->error.__LINE__).?這是一種糟糕的編碼實踐,而且完全沒有必要。相反,您應該啟用正確的錯誤報告。

您的select()方法應該只返回一個數組。這將使您的代碼更加簡單并且不易出錯。因此,將您的select()函數重寫為:

public?function?select($sql){
????return?$this->con->query($sql)->fetch_all(MYSQLI_ASSOC);
}

正如您所看到的,整個功能是一行代碼,這意味著您的select()方法不是很有用。您可以用更通用的東西替換它。這樣你就可以避免大量的代碼重復。

public function executeQuery(string $sql, array $params = []): ?array {

? ? // Prepare/bind/execute

? ? $stmt = $this->con->prepare($sql);

? ? if ($params) {

? ? ? ? $stmt->bind_param(str_repeat("s", count($params)), ...$params);

? ? }

? ? $stmt->execute();

? ? // If it was a select query which gives result then return results in an array

? ? if ($result = $stmt->get_result()) {

? ? ? ? return $result->fetch_all(MYSQLI_BOTH);

? ? }

? ? // If it is INSERT/UPDATE then return null instead of array

? ? return null;

}

當然,這個方法不應該是你的模型的一部分。它應該是數據庫通信專用類的一部分。然后,您可以在應用程序中創建它的單個實例并將其傳遞給您的模型。


查看完整回答
反對 回復 2023-07-08
  • 1 回答
  • 0 關注
  • 479 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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