4

我目前有一个连接到 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 类型的命令?

非常感谢任何帮助。

4

3 回答 3

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 语法。

于 2012-09-22T09:16:09.527 回答
0

您可以在喜欢的 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

于 2012-09-22T09:19:57.743 回答
0

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

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

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

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

于 2017-09-08T09:30:19.367 回答