[英]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.