我说要建立我的数据库类。
这是我的数据库类的一部分。
public function query($sql)
{
return $this->getPdo()->query($sql);
}
我的班级正在运作,但我想改进它。
这是课程的外部部分:
$db = new Database();
$q = $db->query('SELECT * FROM table');
while($r = $q->fetch(PDO::FETCH_ASSOC)){
$results[] = $r;
}
echo "<pre>";
print_r($results);
echo "</pre>";
我希望得到像数据库类一样的部分,如
public function query($sql)
{
return $this->getPdo()->query($sql);
}
public function getAll() {
while($r = $this->query($sql)->fetch(PDO::FETCH_ASSOC)){
$results[] = $r;
}
return $results;
}
但我知道这部分是错误的:$ this-&gt; query($ sql) - &gt; fetch(PDO :: FETCH_ASSOC);我该如何解决?我必须声明类似$ sql的类变量,并且我必须将sql语句分配给$ sql varible。
但我不能。我怎么能这样做?
答案 0 :(得分:1)
$q = $db->query('SELECT * FROM table');
$results = $q->fetchAll();
echo "<pre>";
print_r($results);
echo "</pre>";
答案 1 :(得分:0)
你最大的问题之一就是写作时
public function getAll() {
while($r = $this->query($sql)->fetch(PDO::FETCH_ASSOC)){
$results[] = $r;
}
return $results;
}
您正在使数据库在循环的每次迭代中运行查询。
要修改代码,只需在循环外部运行查询,然后使用fetch作为循环条件:
public function getAll() {
$stmt = $this->query($sql);
while($r = $stmt->fetch(PDO::FETCH_ASSOC)){
$results[] = $r;
}
return $results;
}
可能导致你悲痛的另一个问题是$ sql值似乎来自于凭空。您应该将它传递给getAll函数以访问它。
为了避免所有这些噪音,您可能只想遵循@ YourCommonSense的建议并使用可用的PDO getAll方法。
public function getAll($sql){
return $this->query($sql)->fetchAll(PDO::FETCH_ASSOC);
}
答案 2 :(得分:-2)
您需要将$sql
参数传递给getAll()
方法,然后使用return
将结果退回。所以这个方法变成了:
public function getAll($sql) {
while($r = $this->query($sql)->fetch(PDO::FETCH_ASSOC)){
$results[] = $r;
}
return $results;
}
然后你在外部使用它:
$db = new Database();
$results = $db->getAll('SELECT * FROM table');
echo "<pre>";
print_r($results);
echo "</pre>";