在我正在处理的一个 PHP 项目中,我们需要创建一些 DAL 扩展来支持多个数据库平台。我们遇到的主要缺陷是不同的平台有不同的语法——值得注意的是 MySQL 和 MSSQL 完全不同。
什么是最好的解决方案?
以下是我们讨论过的一对:
基于类的 SQL 构建
这将涉及创建一个允许您逐位构建 SQL 查询的类。例如:
$stmt = new SQL_Stmt('mysql');
$stmt->set_type('select');
$stmt->set_columns('*');
$stmt->set_where(array('id' => 4));
$stmt->set_order('id', 'desc');
$stmt->set_limit(0, 30);
$stmt->exec();
但是,对于单个查询,它确实涉及很多行。
SQL 语法重新格式化
这个选项更简洁——它会读取 SQL 代码并根据输入和输出语言重新格式化它。然而,就解析而言,我可以看到这是一个慢得多的解决方案。