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 关注
- 397 浏览
添加回答
举报