功能中的变量无法访问

时间:2012-09-21 14:58:19

标签: php function variables is-empty

我正在写一个客户数据库。我有一个功能,可以向所有看起来像这样的客户展示。

<?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;
}
}
?>

我想我错了。有什么建议?提前谢谢。

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

您不能在SQL使用的语法上使用变量容器,例如table name或与ordergroup等语法相关的任何其他内容。因此,为了动态执行此操作,您必须转义SQL字符串并使用它

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

- 更新@TimG

由于您处于类环境中,因此应将变量$customerDB视为类属性。您必须使用$this->赋值来使用类的任何属性,除非在这种情况下它是静态的,请使用self::

答案 2 :(得分: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访问类级别内容。