无数据库连接的PHP SQL查询生成器
我有一个老项目,它以这种愚蠢的方式获取数据:无数据库连接的PHP SQL查询生成器,php,mysql,Php,Mysql,我有一个老项目,它以这种愚蠢的方式获取数据: $db = new Database($server, $name, $pass); $where = 'country = "UK"'; if ($_GET['gender']) { $where .= ' AND gender = "' . $_GET['gender'] . '"'; } $sql = "SELECT * FROM users WHERE $where ORDER BY name"; $users = $db->fetch
$db = new Database($server, $name, $pass);
$where = 'country = "UK"';
if ($_GET['gender']) { $where .= ' AND gender = "' . $_GET['gender'] . '"'; }
$sql = "SELECT * FROM users WHERE $where ORDER BY name";
$users = $db->fetchAll($sql);
我想用SQL builder来改进它(在其他项目中我使用Zend的DB表),但问题是,我需要保留数据库类,因为它的获取*()
方法不仅仅是加载数据(例如调试、性能、统计等)
我已经查看了Zend\u Db\u表
,但是所有这些查询生成器都通过自己的fetch()
或execute()
方法连接到数据库连接器。但我需要一个构建器,它只创建可以在现有方法中使用的SQL查询:
$query = new MySqlQuery();
$query
->select('*')
->from('users')
->orderBy('name')
->where('country', 'UK');
if ($_GET['gender']) {
$query->where('gender', $_GET['gender']);
}
$sql = $query->toString();
$db = new Database($server, $name, $pass);
$users = $db->fetchAll($sql);
我想简单地窃取Zend类并重写它们,这样它们就不需要DB连接,但我想看看这些是否已经完成。我创建了修改的Zend\u DB\u Select
,它不需要主动连接到数据库
require_once 'Zend/Db/Query/Mysql.php';
$query = new Zend_Db_Query_Mysql();
$query
->from(array('a' => 'articles'))
->columns(array('id', 'text' => 'content_text'))
->joinLeft('authors',
$query->column('author', 'articles', new Zend_Db_Expr('authors.id'))
)
->where($query->column('archived', 'articles', 0))
->order(new Zend_Db_Expr($query->column('release_time', 'articles') . ' DESC'))
;
$sql = $query->assemble();
作为奖励,我添加了column()
方法,用于将列和表名转换为别名
可用作a或a。此项目似乎正是您想要的:
唯一令人不快的是它需要PHP5.4或更高版本。我面临着同样的问题,除此之外,我的PHP需要是5.3,这是我不使用它的唯一原因。你的数据库类不能继承Zend\u Db\u Table类,覆盖fetchAll
的方法,但仍然让它调用父fetch
(在本例中,Zend\u Db\u Table::fetch
)要检索数据?注意-我不使用ZendFrameworks,所以这纯粹是猜测。猜猜看,还有“手指悬空”luck@DaveyBoy不幸的是,该项目的一部分是非OOP(SQL查询),而另一部分则是过度OOP,因此数据库
的继承树是数据库