gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 23:25:48 24 4
gpt4 key购买 nike

我有一个旧项目以这种愚蠢的方式获取数据:

$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 类并重写它们,这样它们就不需要数据库连接,但我想看看这些是否已经完成。

最佳答案

我创建了不需要主动连接到数据库的修改过的 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 .

关于没有数据库连接的 PHP SQL 查询生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39394070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com