2012-09-21 59 views
0

我正在写一个客户数据库。我有一个功能来显示所有看起来像这样的客户。函数变量无法访问

<?php 
class customer{ 

public function getAllCustomers(){ 
    global $database; 
    $query = $database->query('SELECT * FROM hs_customers'); 
    $result = $database->statement->fetchAll(); 
    return $result; 
} 
} 
?> 

直到这里一切正常。它的连接,即时获取数据等。唯一不满意的是我不希望数据库名称在函数内硬编码,此外我希望它被变量替换。所以ID做了以下(正如我之前做的,它的工作好),但突然它不会替代变量了吗?......

<?php 
class customer{ 

private $customerDB = 'hs_customers'; 

public function getAllCustomers(){ 
    global $database; 
    $query = $database->query('SELECT * FROM :db', array(':db' => $customerDB)); 
    $result = $database->statement->fetchAll(); 
    return $result; 
} 
} 
?> 

我想我已经得到了一些错误。有什么建议?先谢谢你。

回答

1

您不能在SQL使用的语法上使用变量容器,例如,一个table name或其他任何涉及到像ordergroup等语法所以为了动态地做到这一点,你必须逃离SQL字符串,并使用它像

$query = $database->query('SELECT * FROM '.($this->customerDB)); 

- 为@TimG

更新而且因为您处于班级环境中,变量$customerDB应被视为类属性。您必须使用$this->赋值才能使用某个类的任何属性,除非在该情况下为静态,请使用self::

+0

作品:)。谢谢!还有其他人! – Dreshar

+0

这个答案是正确的,但未能解决OP所具有的两个问题。您应该更新您的答案,并提供有关缺少“$ this”的信息,但仍然需要+1才能看到第一眼不明显的问题。 :) –

4

PHP需要您从方法中访问类成员时使用$this

array(':db' => $this->customerDB) 
0

如果你希望能够更换的变量,你需要使用的语句prepare这样的:

$Var1 = 'Allo'; 
$Var2 = 30; 

$Query = $DB->prepare('SELECT * FROM Table WHERE Field1 = :Data1 AND Field2 = :Data2'); 
$Query->bindValue(':Data1', $Var1, PDO::PARAM_STR); 
$Query->bindParam(':Data2', $Var2, PDO::PARAM_INT); 
$Query->execute(); 

bindValue将直接将该值绑定到查询。

bindParam会将变量名称绑定为“static”。如果在运行execute之前编辑该变量,则会显示变量的内容。

另外,你的情况,你需要使用$this->customerDB,而不是$customerDB。您所指的变量在一个班级中,请使用$this访问班级内容。