我正在写一个客户数据库。我有一个功能,可以向所有看起来像这样的客户展示。
<?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;
}
}
?>
我想我错了。有什么建议?提前谢谢。
答案 0 :(得分:4)
PHP要求您在从方法中访问类成员时使用$this
:
array(':db' => $this->customerDB)
答案 1 :(得分:1)
您不能在SQL使用的语法上使用变量容器,例如table name
或与order
,group
等语法相关的任何其他内容。因此,为了动态执行此操作,您必须转义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
访问类级别内容。