簡體   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