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

我想我有什么问题。有什么建议吗?先感谢您。

4

3 回答 3

4

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

array(':db' => $this->customerDB)
于 2012-09-21T15:00:08.223 回答
1

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

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

-- 更新@TimG

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

于 2012-09-21T15:11:39.437 回答
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将变量名绑定为“静态”。如果在运行之前编辑变量execute,变量的内容将跟随。

此外,在您的情况下,您需要使用$this->customerDB,而不是$customerDB。您引用的变量在一个类中,用于$this访问类级别的内容。

于 2012-09-21T15:01:42.503 回答