用于执行MySQL和XML查找的抽象PHP类
我目前正在构建一个库,该库将用作网站的主存储引擎。它只是从MySQL数据库中提取信息,但我想创建变量(使用相同的函数和参数)来从其他存储系统(如XML或MSSQL)获取和设置数据,因此,如果更改了数据库类型,则无需重新编程。另外一个好处是,它还增加了安全性,以帮助防止SQL注入攻击用于执行MySQL和XML查找的抽象PHP类,php,mysql,xml,abstract-class,Php,Mysql,Xml,Abstract Class,我目前正在构建一个库,该库将用作网站的主存储引擎。它只是从MySQL数据库中提取信息,但我想创建变量(使用相同的函数和参数)来从其他存储系统(如XML或MSSQL)获取和设置数据,因此,如果更改了数据库类型,则无需重新编程。另外一个好处是,它还增加了安全性,以帮助防止SQL注入攻击 我现在讨论的问题是这门课的摘要。我不确定如何以一种适用于不同类型的方式构造它(因此我不能只使用SQL字符串)。是否有人对可以提供哪些论据有任何想法。我曾考虑使用嵌套数组为查询创建括号和定义运算符,但在使用XML时,这
我现在讨论的问题是这门课的摘要。我不确定如何以一种适用于不同类型的方式构造它(因此我不能只使用SQL字符串)。是否有人对可以提供哪些论据有任何想法。我曾考虑使用嵌套数组为查询创建括号和定义运算符,但在使用XML时,这可以用于直接分析。我希望我没有误解您的问题(在这种情况下,我将编辑或删除答案),但如果我理解正确:
这取决于您的用例,但如果可能的话,我只会使用与相同的接口。然后,您可以在存在PDO驱动程序的地方使用PDO驱动程序。其他程序员将很容易理解您的API。使用两个OOP继承分支如何:查询分支和数据分支
class query {
protected $row_classname = 'row';
protected $params = array();
protected $result;
public function bind_param($name, $value) { ... }
public function execute() {
//here go some common cache issues, param checks, etc.
$this->run_query();
}
public function get_result() {
//you can map it to $this using __get and __set
return $this->result;
}
abstract function run_query();
}
class sql_query extends query {
protected $pdo_connection;
protected $pdo_statement;
protected function run_query() {
$this->pdo_statement = $this->get_pdo()->prepare($this->get_statement());
$this->pdo_statement->setFetchMode(PDO::FETCH_CLASS, $this->row_classname);
$this->bind_params_to_pdo_statement();
$this->pdo_statement->execute();
$this->result = $this->pdo_statement->fetchAll();
}
}
class select_users_by_id extends sql_query {
protected $row_classname = 'user_row';
protected function get_statement() {
return 'SELECT * FROM users WHERE id = :id';
}
}
//memcached branch
class memcached_query extends query {
protected function run_query() {
$this->result = new $this->row_classname;
$results = $this->action();
foreach($results AS $k => $v) {
$this->result->$k = $v;
}
}
abstract protected function action();
}
class get_user_by_id extends memcached_query {
protected $row_classname = 'user_row';
protected function action() {
$this->get_memcached_handler()->get_by_key($this->params['key']);
}
}
//usage in project
...
$users_by_id = new select_users_by_id();
$users_by_id->bind('id', 14);
$users_by_id->execute();
var_dump($users_by_id->get_result()->name);
...
//user_row branch
class row {
protected $row = array();
public function __set($name, $value) {
$this->row[$name] = $value;
}
public function __get($name) {
return $this->row[$name];
}
}
class user_row extends row {
...
}
有点,但我试着用一些东西,在同一个论点中,把它紧密地联系在一起。我已经决定返回一个数据行数组(每行作为嵌套数组,在该数组中,键是列,值是值)。但是PDO看起来确实有用,但它不包含XML。原因是我为那些坚持自己托管的人编写了网站,但他们的托管软件包太便宜,无法升级。我们打算用它来快速解决问题。