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