我目前有一个大型Web应用程序连接到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类型的命令?
非常感谢任何帮助。
答案 0 :(得分: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语法。
答案 1 :(得分:0)
您可以使用find&amp; replace替换您的favourit IDE,例如,在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
答案 2 :(得分:0)
我最近遇到过这个问题。使用MYSQL Workbench发现确实解决了将数据库从MSSQL迁移到MYSQL的问题。但是,仍存在一个问题,即虽然数据库中没有发生很多编辑,但由于某些问题,PHP端代码正在被频繁编辑。因此,每天逐个迁移每个文件变得很困难。所以我研究并提出了一个仍然不是100%的功能,并且有其缺点,但解决了我的问题。
我使用Sublime Text Editor,并使用它将所有出现的mssql_替换为sql_,然后包含该函数。
我首先尝试定义mssql_函数,但事实证明,我必须从PHP模块中实际禁用mssql。如果只有一个应用程序使用该PHP,那很好,但由于有很多,我不得不将每个页面重写为新函数。
您可以找到我的代码here。但我不能保证你得到完整的结果。