没有数据库连接的PHP SQL查询生成器

时间:2016-09-08 14:51:18

标签: 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->fetchAll($sql);

我想用SQL构建器(在我使用Zend的数据库表的其他项目上)改进它,但问题是,我需要保留Database类,因为它的fetch*()方法不仅仅是只是加载数据(例如调试,性能,统计等)。

我查看了Zend_Db_Tablethis post,但所有这些查询构建器都附加到具有自己的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类并重写它们以便它们不需要数据库连接,但我想看看这些是否已经完成。

2 个答案:

答案 0 :(得分:1)

我已经创建了不需要与数据库进行有效连接的修改后的Zend_Db_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()方法,将列名和表名转换为别名。

Zend extensionstandalone library提供。

答案 1 :(得分:0)

这个项目似乎是你想要的:

https://github.com/nilportugues/php-sql-query-builder

唯一令人沮丧的是它需要PHP 5.4或更高版本。我面临同样的问题,最重要的是我的PHP需要为5.3,这是我不使用它的唯一原因。