我需要将应用程序从 MySQL 转换为 SQL Server。
有许多涉及 MySQL 数据库函数的硬编码查询,例如NOW()、LCASE()、MATCH() AGAINST(),它们在 SQL Server 中具有等价物,但语法和结构不同。
我选择Propel是因为它似乎易于使用。
我正在寻找一种通过扩展 Propel 类来模拟NOW() {MySQL}和GETDATE() {SQL Server}等数据库函数的方法。
我认为是这样的:
$result = Function::NOW(); // MySQL
$result = Function::GETDATE(); // SQL Server
当函数接受参数时,例如LCASE() {MySQL}或LOWER() {SQL Server},它可能是这样的:
$table = new MyTable();
$result = Function::LCASE($table->getName()); // MySQL
$result = Function::LOWER($table->getName()); // SQL Server
或者
$table = new MyTable();
$result = Function::MD5($table->getPassword()); // MySQL
$result = Function::HASHBYTES('MD5', $table->getPassword()); // SQL Server
完美的解决方案是,如果我可以在来自不同数据库(MySQL 和 SQL Server)的具有相同目的的两个函数之间创建等价。
因此,我可以始终使用Function::MD5()而不是在我的 PHP 代码中使用Function::HASHBYTES( ) ,因为它更简单,并且当我的应用程序在内部连接到 SQL Server 数据库时,HASHBYTES()被调用。