繁体   English   中英

为软件开发人员创建PHP / MySQL升级脚本的最佳方法是什么?

[英]What is the best way to create a PHP/MySQL upgrade script for a software developer?

我是一名PHP软件开发人员,我正在寻找解决这个问题的最佳解决方案。 我正在创建一个脚本,将来会有新版本,包括新功能,错误修正等。我知道如何在升级脚本中进行代码更改,但是我正在开发的脚本使用MySQL在多个表中存储数据。

现在问题是,我已经想出了如何为初始版本制作安装脚本,但是制作可以将任何以前的版本升级到最新版本的升级脚本的最佳解决方案/方法是什么? 最新版本有新的MySQL表(不是问题),但它也改变了数据库结构(新列,删除列等)我将在下面创建一个场景,以更好地描绘我担心的问题。

v0.1.0 - 初始版本

v0.1.1 - 有一个新的数据库表和一些字段添加到表结构中

v0.2.0 - 有更多新字段添加到不同的表中

我担心的是升级v0.1.0> v0.2.0,因为两个版本之间有变化。

更新我可能已经提到我只使用GitHub作为我的VCS代码。 所有代码更改都保存在那里,并在安装或升级脚本中进行代码更改,我只是计划覆盖用户的当前文件,因为它们不应该在类/函数文件中包含任何数据。

根据我的经验,最好的方法是在MySQL中创建一个版本控制表,其中包括应用程序的版本号以及任何更改数据库结构的查询。 基本上:

CREATE TABLE versions (
    app_version DOUBLE NOT NULL,
    query TEXT,
    created TIMESTAMP NOT NULL 
);

使用我们的安装脚本,我们会记下我们的初始应用程序版本和目标应用程序版本,并选择需要执行的所有查询才能使用。

SELECT query FROM versions WHERE app_version > {$initialAppVersion} AND app_version <= {$destinationAppVersion} ORDER BY created ASC;

在PHP中:

foreach ($resultset AS $row) {
    $stmt = $db->prepare($row['query']);
    try {
       $stmt->execute();
    } catch (Exception $e) { /* handle exception */ }
}

您可以将它们所在的当前架构版本存储在某个位置。

对于升级脚本,在继续进行任何更新之前,请检查以确保它在先前版本上。 这样可以防止跳过或错过更新。

另一个建议是:

某些ORM(如PropelDoctrine)允许自动创建此类迁移脚本。

检查例如:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM