在代码中,SQL查询中使用了一个声明的变量$table_prefix
(非全局),如下所示:
$sql="SELECT * FROM {$table_prefix}table WHERE id = %d";
$table_prefix
根据某些条件(即主机,远程IP等)进行更改
问题
为了实现我的目标,我创建了一个具有许多函数的类,用于向SQL读取/写入数据。现在我不得不在每个功能中重复global $table_prefix
。它看起来与此相似:
class MyClass {
function loadData($id=0){
global $table_prefix;
$sql = "SELECT * FROM {$table_prefix}table WHERE id = %d;";
[...]
}
function saveData($id=0, $data){
global $table_prefix;
if(is_array($data) [...] ){
$sql = "UPDATE
{$table_prefix}table
SET
data_1= %s,
data_2 = %d
WHERE id = %d;";
[...]
}
}
}
问题
有没有办法声明这个$table_prefix
一次并在每个类函数中使用它而不重复它。
protip 如果您发现我的英语有误,请随时写信给我 - 我还在学习,学习和学习。 ..似乎永远都是这样,不仅仅是因为我的语言技能,因为人们学习一生:)
答案 0 :(得分:0)
在班级的构造函数中执行此操作:
class MyClass {
private $table_prefix;
public function __construct($table_prefix) {
$this->table_prefix = $table_prefix;
}
private function table($name) {
return $this->table_prefix.$name;
}
function loadData($id=0){
$sql = "SELECT * FROM ".$this->table("table")." WHERE id = %d;";
//Or you can not define the function and do the following:
//$sql = "SELECT * FROM ".$this->table_prefix."table WHERE id = %d;";
[...]
}
...
}
然后,您需要以不同方式构建您的类:
$class = new MyClass($tablePrefix); //Where $tablePrefix is the prefix you've computed
答案 1 :(得分:-4)
我建议您在配置阶段使用Define
功能全局定义table_prefix
。
示例代码:
的config.php
<?php define('table_prefix','prefix_');
MyClass.php
$sql = "UPDATE " . table_prefix . "...";