提问人:Fares Ars 提问时间:7/5/2020 最后编辑:DharmanFares Ars 更新时间:7/5/2020 访问量:138
我们应该在哪里使用fetch_assoc方法?
Where should we use fetch_assoc method?
问:
我开始了这个小博客项目,我认为我只是犯了一个错误,没有包括方法。
这是代码: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>
这就是选择方法的样子:
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
答:
0赞
Dharman
7/5/2020
#1
您大部分时间都不需要使用。如果你正在围绕mysqli编写某种抽象类,那么你永远不需要直接使用任何mysqli函数。fetch_assoc()
mysqli:query()
返回一个可迭代类型的对象。这意味着您可以使用循环来迭代它。mysqli_result
foreach
我需要指出的是,你仍然遵循一些糟糕的编程实践。切勿使用 .这是一种糟糕的编码实践,完全没有必要。相反,您应该启用正确的错误报告。请参阅如何在MySQLi中获取错误消息?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;
}
当然,此方法不应成为模型的一部分。它应该是数据库通信专用类的一部分。然后,您可以在应用程序中创建它的单个实例,并将其传递给模型。
评论
0赞
Fares Ars
7/5/2020
感谢您@Dharman回复,但是,我们可以有其他东西,例如整数,因此我们需要 d 而不是 s,因为我认为我们需要一个循环来将所有参数作为数组放入bind_param(str_repeat("s",count($params)), ...$params)
$params
executeQuery methode
0赞
Dharman
7/5/2020
@FaresArs 99.99% 的情况下,除了字符串之外,您不需要任何东西。但是,如果您确实需要手动指定类型,那么我建议您阅读这篇简短的文章: phpdelusions.net/mysqli/simple
上一个:如何从数据库中获取价值
评论