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;
}
當然,這個方法不應該是你的模型的一部分。它應該是數據庫通信專用類的一部分。然后,您可以在應用程序中創建它的單個實例并將其傳遞給您的模型。
- 1 回答
- 0 關注
- 479 瀏覽
添加回答
舉報