将PHP代码从MSSQL迁移到MySQL

时间:2012-09-22 09:09:45

标签: php mysql sql-server

我目前有一个大型Web应用程序连接到MSSQL以获取其数据。这个Web应用程序有数百个.php文件。我有一个新客户,他不想使用MSSQL,而是使用MySQL。

我搜索过并发现了很多关于如何迁移数据的文章。但那不是我的问题。我知道如何做到这一点,除了一些默认目录外,我们将从一个空白数据库开始。

我需要知道的是,是否有办法自动将mssql_query代码更改为mysqli代码。例如:

$SqlText = 'SELECT a, b, c FROM table WHERE x=y';
if (!$result = mssql_query($SqlText) {
   die('Error');
}
while ($row = mssql_fetch_assoc($result) {
   echo '<td>' . $row['a'] . '</td>';
   echo '<td>' . $row['b'] . '</td>';
   echo '<td>' . $row['c'] . '</td>';
}

类似于:

$SqlText = 'SELECT a, b, c FROM table WHERE x=y';
if (!$result = mssqli_query($db, $SqlText) {
   die('Error');
}
while ($row = mssqli_fetch_assoc($result) {
   echo '<td>' . $row['a'] . '</td>';
   echo '<td>' . $row['b'] . '</td>';
   echo '<td>' . $row['c'] . '</td>';
}

此外,正如您所看到的,我使用的是旧的mssql_query代码,在较新版本的PHP中甚至不支持。是否至少有一个工具可以将我的代码从mssql_query更改为新版本的sqlserv_query类型的命令?

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

我认为没有一种完全自动的方式。因为MySQL有'LIMIT',例如MSSQL有'TOP'。当然,这不一定是个问题,但我不确定复杂的MSSQL查询是否会将1:1转换为MySQL。

建议您使用``符号指向MySql,它是数据库,表或列名称的成员。例如:

$SqlText = 'SELECT a, b, c FROM table WHERE x=y';

会改为

$SqlText = 'SELECT `a`, `b`, `c` FROM `table` WHERE `x`=y';

现在您可以进行类似

的查询
'SELECT `select` FROM `datetime` WHERE `limit` = 1'

否则,单词,select,datetime和limit会干扰MySql语法。

答案 1 :(得分:0)

您可以使用find&amp; replace替换您的favourit IDE,例如,在netbeans中单击项目窗口,然后编辑,替换并键入您的函数名称

你也可以使用这样的PHP脚本:

$config = array('msssql_query'=>'mysqli_query' /*... all the functions*/)

$dirs = array('./','subDirectory1','subDirectory2');/*all your sub dirs*/);
foreach($dirs as $dir){
    foreach(glob($dir.'/*.php') as $filename){

         $filecontent = file_get_contents($filename);
         file_put_contents(str_replace($config,$filecontent,$filename));

    }
}

此外,正如@endyourif所说,你最好将数据库连接包装在类和接口中。

interface DAOInterface{
     public function query($string);
     public function prepare($string);
     public function quote($string);//etc

}
interface DAOStatementInterface{
    public function execute($array = array());
    public function bind($value,$param,$type);
    /*etc*/
}

或者您可以使用PDO

答案 2 :(得分:0)

我最近遇到过这个问题。使用MYSQL Workbench发现确实解决了将数据库从MSSQL迁移到MYSQL的问题。但是,仍存在一个问题,即虽然数据库中没有发生很多编辑,但由于某些问题,PHP端代码正在被频繁编辑。因此,每天逐个迁移每个文件变得很困难。所以我研究并提出了一个仍然不是100%的功能,并且有其缺点,但解决了我的问题。

我使用Sublime Text Editor,并使用它将所有出现的mssql_替换为sql_,然后包含该函数。

我首先尝试定义mssql_函数,但事实证明,我必须从PHP模块中实际禁用mssql。如果只有一个应用程序使用该PHP,那很好,但由于有很多,我不得不将每个页面重写为新函数。

您可以找到我的代码here。但我不能保证你得到完整的结果。