2013-07-30 107 views
0

我说建立我的数据库类。将SQL语句分配给类变量

这是我的数据库类的一部分。

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->查询($ SQL) - >取(PDO :: FETCH_ASSOC);我该如何解决它?我必须声明一个像$ sql这样的类变量,并且我必须将sql语句分配给$ sql变量。

但我不能。我怎样才能做到这一点 ?

+0

您是否在班上有**准备语句**支持? –

+0

现在没有。但我会添加它。现在绑定值和准备对我来说更加复杂。我解决了这个问题后。我会去做。但一步一步来。 – cihanblog

回答

1
$q = $db->query('SELECT * FROM table'); 
$results = $q->fetchAll(); 

echo "<pre>"; 
print_r($results); 
echo "</pre>"; 
-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>"; 
0

你的一个最大的问题是,当你写

public function getAll() { 
    while($r = $this->query($sql)->fetch(PDO::FETCH_ASSOC)){ 
     $results[] = $r; 
    } 
    return $results; 
} 

你是导致数据库运行循环的每个迭代的查询。

要纠正代码,因为它是简单地定义运行查询的循环之外再使用提取的循环条件:

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); 
} 
相关问题