无数据库连接的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,因此
数据库
的继承树是
数据库