繁体   English   中英

将PHP代码从MSSQL迁移到MySQL

[英]Migrate PHP code from MSSQL to MySQL

我目前有一个大型Web应用程序,该应用程序连接到MSSQL以获取其数据。 此网络应用程序包含数百个.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类型的命令吗?

任何帮助,不胜感激。

我认为没有全自动的方法。 例如,因为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语法。

您可以在收藏夹的IDE中使用find&replace,例如,在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

我实际上最近遇到了这个问题。 发现使用MYSQL Workbench确实解决了将数据库从MSSQL迁移到MYSQL的问题。 但是,仍然存在一个问题,尽管数据库中没有进行很多编辑,但是由于某些问题,经常需要对PHP辅助代码进行编辑。 因此,很难每天一次迁移每个文件。 因此,我研究并提出了一个仍不是100%的函数,它具有缺点,但解决了我的问题。

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

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

您可以在这里找到我的代码。 但是我不能保证您能得到完整的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM