软件开发者懒惰但聪明,这就是我们做出RAD的原因:PHP.Show概念





5.00/5 (6投票s)
一种灵活的 Java MySQL CRUD PHP 脚本生成器的看法。
引言
当涉及到重复代码时,为不同的客户编写不同的应用程序,这始终被证明是一项枯燥的工作,这就是为什么我们总是想出捷径。如果您是软件开发人员,您会了解For Next循环和Do While或Do Until循环。这些循环的存在是为了通过运行循环来消除一次又一次地执行任务的需求。在大多数情况下,软件开发人员会谈论快速应用程序开发(RAD),这是一种通过简单的按钮点击轻松生成用户界面(UI)或后端(数据库)的方法。RAD工具通常只需提供一些属性,例如数据库连接,就可以轻松地生成一个应用程序的源代码和屏幕。它们存在的首要原因是:1.消除重复,2.消除一遍又一遍地重写和重新创建执行例如CRUD(创建、读取、更新、删除)功能的源代码的需要,而这一切都由它们为您完成。
因此,本质上,您在指定了应用程序的一些条款和条件后,有人会为您编写代码,而您则不用。在RAD工具的情况下,有人聪明地编写了它来创建源文件、数据库连接字符串、数据库创建语句等。我敢打赌,在所有这些情况下,问题在于,我们不得不一次又一次地做几乎相同的步骤,例如,创建一个CRUD(创建、更新、删除)数据库应用程序,创建用户界面、后端等,为什么我们不编写一个可以为我们做到这一点的RAD工具,然后调整最终结果以满足客户需求呢? Eureka!是的,我们在处理重复性任务时很懒惰,因此会找到聪明的工作方式,通过正是这样做,找到并开发RAD工具来帮助我们处理应用程序,最终使用可用的最新技术拥有可靠的软件应用程序。
我开发软件已经有一段时间了,事实上,我认为我早就超过了10000小时的标记。可悲的是,考虑到这一点,随着移动设备的新发展,我出于好奇,不得不重新开始,并自学应用程序开发。我这样做了两年,幸运的是,我设法获得了一些有用的工具来帮助我实现我的梦想。
三周前,我遇到了一个编码问题,需要为我的数据库应用程序生成php脚本。该应用程序必须同时适用于Android和iOS,并将使用CRUD功能来操作远程 MySQL 服务器。我想要一些简单直接的东西。在网上搜寻许久,也没有找到能帮助我实现目标的工具。我决定自己动手。
我面临的挑战之一是我从未在PHP中使用过MySQL。我在很多应用程序中都使用过MySQL,但使用的是Microsoft技术,那么我该如何做呢?
案例场景:我的数据库中有10个或更多相互关联的表。在某些表中,我将根据另一个表中的另一个字段来更新一个字段。因此,尽管我将为我的应用程序使用CRUD功能,但一些CRUD方法将非常小且非常具体,以至于我将在数据库中执行的操作数量很多但都很小。我不想编写每一个脚本,而现有的PHP生成器虽然更优越,但并未提供我想要的东西。我开始思考。过了一会儿,我构思、开发并创建了Php.Show,一个RAD工具,我相信我会在所有需要开发使用PHP的应用程序(无论是桌面还是移动,使用MySQL)的情况下反复使用它。
一些不成熟的假设:您能够使用MySQL创建数据库。您熟悉PHP并编写其脚本。您可以将PHP文件上传到Web服务器。您可以调试PHP脚本并能够调用PHP脚本。您了解JSON。
背景
本文将深入探讨Php.Show的输出,后续文章将详细介绍我如何使用 B4J(Basic 4 Java)这个免费的RAD工具来开发Php.Show,B4J来自Anywhere Software,可以使用类似VB的语法创建Java应用程序。
PHP.Show生成PHP源代码,即用于MySQL数据库CRUD功能的脚本。用户可以创建一个表、其字段(及其属性),这将为您指定的表生成INSERT、UPDATE、DELETE、SELECT语句, all in one php file, which you can upload to your web server and call from within your developed application.
Php.Show是一个使用类似VB语法的Java应用程序。对我来说,这也是一个新的领域,我将在另一篇文章中提及。拥有这样一个工具的好处是消除了为数据库中的不同表一遍又一遍地编写相同PHP脚本的繁琐任务。此外,它还提供了创建自己的小型CRUD脚本的功能,以及选择要执行的特定操作的字段的能力。这正是我最想要的那种智能功能。
当您启动应用程序时,会显示图1,我将详细解释各个部分。同时,我们还将查看生成的php脚本。这将为您提供CRUD PHP功能是如何生成的概念。因此,在您有机会使用RAD工具生成PHP脚本的同时,您也将学会如何使用PHP。不过,您可以在W3School上找到大量关于此的信息, 此处。
图 1
如上所述,有一个部分用于指定数据库连接,创建表和创建字段,然后是其他操作。
选择 **帮助 > 关于**,可以了解Php Show的用途。
要从您选择的mysql表中生成php脚本文件,请选择 **文件 > 编译**。让我们创建一个新的php文件。
步骤1:MySQL数据库连接
为此,我们首先需要指定我们的MySQL php文件将连接到的数据库连接。图2详细说明了这一点。
图 2
输入主机名、用户名、密码和数据库。在编译时,这些内容会根据您在此部分中指定的详细信息转换为以下PHP脚本:
// define the database connection parameters.
$servername = "myhost";
$dbname = "mydb";
$username = "myuser";
$password = "mypassword";
// get the action to the performed from the querystring.
$action = $_GET["action"];
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
步骤2:创建表
图 3
上面的图3有两个部分,一个列表视图列出所有已创建的表,以及一个创建新表、保存、删除和操作的部分。
创建新表
1. 在表属性中单击“新建”图标
2. 输入表名
3. 点击保存
更新表名
1. 从列表中选择表名
2. 更新表名
3. 点击保存
删除表
1. 从列表中选择表名
2. 点击删除
图4:确认删除表
4. 确认删除(此操作无法撤销)
步骤3:为表创建字段
默认情况下,在创建表时,假定的操作是与您为表指定的、使用主键字段相关的CRUD。此主键字段假定为递增字段。为了完成此过程,应指定将成为php脚本一部分的每个字段。
1. 确保已选择要添加字段的表,并且其名称显示在“表名”中
2. 在字段属性中,选择“新建”图标
3. 输入字段名。
4. 选择字段类型(当前有String和Int)
5. 主键:如果此字段是主键,则勾选此项。当是主键时,此字段将用于php脚本中的Delete和Update语句。
6. 获取:如果您想使用此字段生成SELECT语句,则勾选此项。默认情况下,会创建一个“get”操作,并使用主键字段,但是如果您想在SELECT语句中使用另一个字段,也可以勾选此项。例如,假设您有一个名为Contacts的表,它有字段:id、firstname、lastname、age。id字段是主键,在这种情况下,您将选择Primary。例如,如果您还想通过lastname =?创建一个select语句,当创建lastname字段时,您可以勾选Get,以告知生成器我们将运行一个查询来获取所有姓氏为?的记录。
7. 排序:如果您希望SELECT语句返回排序结果,可以使用此字段。勾选此字段。
8. 点击保存。这将更新字段列表视图。
更新字段
1. 从字段列表中选择字段
2. 更改字段名称或类型或其他详细信息,如Primary、Get和Sort
3. 点击保存
删除字段
1. 从列表中选择字段
2. 点击删除
3. 确认删除字段(此操作无法撤销)
步骤4:编译PHP脚本文件
1. 从表列表中选择要处理的表
2. 点击文件 > 编译。
php脚本文件将为您生成并保存。让我们创建一个contacts表来更清晰地展示这一点。
示例:创建Contacts php脚本。
1. 我将使用一个虚构的数据库。所以请像这样设置您的MySQL属性。
2. 添加一个contacts表。在“表属性”中,单击“新建”,在表名中键入“contacts”,然后单击“保存”
3. 添加字段,id、firstname、lastname、telephone,如下所示。注意:每次单击“新建”来创建字段。
让我解释一下我们刚才做的事情。
1. id:我们创建了一个id字段。这是主键,因此勾选了Primary。它是一个自增字段,因此字段类型为Int。
2. firstname:我们创建了一个firstname字段。我们也想通过firstname获取记录,因此勾选了Get。
3. lastname:我们创建了一个lastname字段。我们也想按lastname对记录进行排序,因此勾选了Sort
注意:每次添加新字段时,请单击字段属性中的“新建”,完成后,请单击“保存”。最好确保您的字段名称不包含空格。
现在我们完成了。单击列表中的contacts表,单击“文件” > “编译”,然后查看生成的php脚本。记住,这个工具的目的是生成您的CRUD脚本。因此,对于指定的表,我们将为contacts表生成SELECT、INSERT、DELETE和UPDATE语句,以获取创建的字段。在您确认要生成脚本文件后,我们将进一步探讨。
MySQL数据库后端contacts表
这只是一个示例contacts表,展示了它在您的Web服务器上的MySQL后端数据库中的样子。请注意,id字段设置为自动,这意味着它将自行自增。所以,我们上面使用Php.Show所做的是创建相同的结构,但用于我们的应用程序。也许在未来版本的此RAD工具中,我将添加自动读取数据库的功能,我们拭目以待。
请注意,使用PHP.Show创建此数据库表结构并不会在后端数据库中为您创建表。
输出:PHP脚本文件
编译完成后,将为您打开生成的文件。我有时使用 NotePad++ 进行编码,所以在我这里,文件将用它打开。让我跳过并解释如何从Web服务器调用此文件来执行它。
正如您将注意到的,生成的文件将是 **contacts.php**。这意味着所有相关的数据库操作都将存储在此处。什么操作要执行的主要决定因素是通过在您的调用中指定一个*action*变量来维护的。php脚本文件内的switch语句会捕获这个action,然后执行所需的各种操作。
调用Contacts.php的CRUD功能
1. **创建**联系人(INSERT SQL语句)
呼叫
/contacts.php?action=create?firstname=Anele&lastname=Mbanga&telephone=01123567989
脚本:(这使用了switch方法)
case "create":
// insert a new record to the table, the primary key is assumed auto increment
$firstname = $_GET["firstname"];
$lastname = $_GET["lastname"];
$telephone = $_GET["telephone"];
$sql = "INSERT INTO contacts";
$sql = $sql . " (firstname,lastname,telephone) VALUES";
$sql = $sql . " ('$firstname','$lastname','$telephone')";
$result = $conn->query($sql);
break;
当您在Web服务器上运行此调用时,将执行创建脚本。我已经根据您创建的字段名在脚本中定义了变量。首先,它获取传递给服务器的查询字符串的每个变量,然后运行INSERT INTO语句,用您指定的信息填充contacts表。因为id字段由MySQL数据库管理,所以它不作为变量传递到我们的调用中。
数据库
2. **读取**联系人(SELECT SQL语句)
要从数据库读取记录,将使用SELECT SQL语句,并传递一个where子句,该子句将指示满足您条件的记录。在此实例中,我们通过id检索单个记录。
呼叫
/contacts.php?action=read&id=1
脚本
case "read":
// get a single record from the table using the primary key
$id = $_GET["id"];
$sql = "SELECT * FROM contacts";
$sql = $sql . " WHERE id = $id";
$sql = $sql . " ORDER BY lastname";
$result = $conn->query($sql);
$rows = array();
while ($row = $result->fetch_assoc()) {
$rows[] = $row;
}
print json_encode($rows);
break;
这将调用方法来获取由id指定的联系人记录,并将其作为JSON字符串返回。您也可以进行另一次调用来获取所有记录,如下面的演示。您注意到上面的ORDER BY子句了吗?记住,当我们创建lastname字段时,我们勾选了Sort,以告知应用程序返回的所有记录都应按lastname排序。您可以选择多个字段包含在排序中。它们的顺序将取决于它们在应用程序中的添加顺序。
3. **更新**联系人(UPDATE SQL语句)
要更新现有联系人记录,我们需要知道主键字段的值。从上面的数据库屏幕,这已在我们的后端创建为id=1。*Php.Show生成的php脚本假定当您进行更新时,您会更新所有字段*。稍后我将在**操作**部分展示如何更新特定字段。
呼叫
/contacts.php?action=update&id=1&firstname=Anele%20Mash%lastname=Mbanga&telephone=01123567989
脚本:(这使用了switch方法)
//process the actions
switch ($action)
{
case "update":
// update the table record using the primary key
$id = $_GET["id"];
$firstname = $_GET["firstname"];
$lastname = $_GET["lastname"];
$telephone = $_GET["telephone"];
$sql = "UPDATE contacts SET ";
$sql = $sql . "firstname='$firstname',";
$sql = $sql . "lastname='$lastname',";
$sql = $sql . "telephone='$telephone'";
$sql = $sql . " WHERE id = $id";
$result = $conn->query($sql);
break;
数据库
如您所见,本质上,这段代码只更新了第一个名字为“Anele Mash”。您可能想知道为什么在只更新firstname时还要传递完整的查询字符串?请记住,这些脚本是用于CRUD功能的,其中您的用户界面将从数据库读取并在屏幕控件上显示,然后读取相同的屏幕控件并更新服务器。注意字符串变量字段周围的单引号。
4. **删除**联系人(DELETE SQL语句)
**创建**-**读取**-**更新**-**删除**基本数据库功能的最后一个部分是delete方法。由于id字段是指定为主键的字段,因此我们将使用它从contacts表中删除记录。
呼叫
/contacts.php?action=delete&id=1
脚本:(这使用了switch方法)
case "delete":
// delete a record from the table using the primary key
$id = $_GET["id"];
$sql = "DELETE FROM contacts";
$sql = $sql . " WHERE id = $id";
$result = $conn->query($sql);
break;
上面的脚本从传递的查询字符串获取id,然后执行delete语句从表中删除记录。从现在开始,我们将看看我们添加的其他检索数据库记录的方法。
5. 读取所有联系人
呼叫
/contacts.php?action=readall
脚本
case "readall":
// get all records from the table with a sort order if specified
$sql = "SELECT * FROM contacts";
$sql = $sql . " ORDER BY lastname";
$result = $conn->query($sql);
$rows = array();
while ($row = $result->fetch_assoc()) {
$rows[] = $row;
}
print json_encode($rows);
break;
注意:对于小型数据库和小型表,这可能效果很好,因为它一次调用返回数据库表中的所有记录。对于非常大的数据库,这可能会对资源有限的Web服务器和拥有大型表的多个用户造成挑战。在这种情况下,您可以单独将每条记录回显给用户。
6. 按名字获取联系人
但我还想根据名字返回联系人记录,因此在我指定该字段的属性时勾选了Get。
下面我们来看看这是怎么做的。在您希望返回具有特定字段值的记录的情况下,您也可以将字段标记为Get。我们为firstname这样做了。
呼叫
/contacts.php?action=getfirstname&firstname=Anele
脚本
case "getfirstname":
// get records by firstname with sort order if specified
$firstname = $_GET["firstname"];
$sql = "SELECT * FROM contacts";
$sql = $sql . " WHERE firstname = '$firstname'";
$sql = $sql . " ORDER BY lastname";
$result = $conn->query($sql);
$rows = array();
while ($row = $result->fetch_assoc()) {
$rows[] = $row;
}
print json_encode($rows);
break;
此调用将从数据库表中选择所有名字为Anele的联系人。
Actions
以下部分将讨论灵活查询(称为操作)的问题。上面的部分在创建php脚本方面没有提供任何灵活性,因为它们的内容是固定的,它们做什么取决于您创建的字段。操作可以完美地做到这一点。例如,您只想根据电话号码或任何字段来选择、更新或删除联系人。
要创建此类脚本,您需要创建一个操作。
1. 操作步骤1:创建操作
1. 选择要添加/更新/删除操作的表名
2. 在“表属性”中,单击“操作”。此时会出现操作屏幕。
3. 单击“新建”并输入操作名称,例如,telephone
4. 指定主键(例如,您想通过电话号码选择/更新/删除您的联系人,所以在这里指定电话号码。这就是我们所说的灵活性。)
5. 有一些方法可以选择创建,在这种情况下,您可以勾选SELECT、INSERT、DELETE和UPDATE。
6. 在字段名称中,选择firstname并单击>,然后是lastname,然后单击>,然后是telephone,然后单击>。
7. 点击保存。这将如下所示……
8. 在“其他操作”中选择telephone,然后单击“预览”按钮,这将为您生成此操作的php脚本。让我们看看这是怎么做的。
按电话号码选择联系人
case "select_telephone":
$telephone = $_GET["telephone"];
$sql = "SELECT firstname,lastname,telephone FROM contacts";
$sql = . " WHERE telephone = $telephone";
$result = $conn->query($sql);
$rows = array();
while ($row = $result->fetch_assoc()) {
$rows[] = $row;
}
print json_encode($rows);
break;
从您的调用中,例如 /contacts.php?action=select_telephone&telephone=0123456789
这将返回所有具有该电话号码的记录。这是我们在创建操作时勾选SELECT的结果。
按电话号码删除联系人
case "delete_telephone":
$telephone = $_GET["telephone"];
$sql = "DELETE FROM contacts";
$sql = . " WHERE telephone = $telephone";
$result = $conn->query($sql);
break;
如上所示,当通过 /contacts.php?action=delete_telephone&telephone=0123456789 调用此脚本时,具有此电话号码的所有联系人将被删除。
基于电话操作插入联系人
case "insert_telephone":
$firstname = $_GET["firstname"];
$lastname = $_GET["lastname"];
$telephone = $_GET["telephone"];
$sql = "INSERT INTO contacts";
$sql = . " (firstname,lastname,telephone) VALUES";
$sql = . " ($firstname,$lastname,$telephone)";
$result = $conn->query($sql);
break;
此语句与前面讨论的相同,但是,如果您没有在操作中包含所有字段,那么只有那些字段将包含在此插入脚本中。
按电话号码更新联系人
case "update_telephone":
$firstname = $_GET["firstname"];
$lastname = $_GET["lastname"];
$telephone = $_GET["telephone"];
$sql = "UPDATE contacts SET ";
$sql = . "firstname=$firstname,";
$sql = . "lastname=$lastname,";
$sql = . "telephone=$telephone";
$sql = . " WHERE telephone = $telephone";
$result = $conn->query($sql);
break;
当我们创建操作时,我们也勾选了UPDATE。这意味着对于我们的操作,我们还将有一个基于电话号码的更新脚本。
再次重新编译表脚本将包括您在其中创建的所有操作。这就是全部了,希望您喜欢这个,它让您对PHP MySQL集成有了更清晰的认识。在我即将发表的文章中,我将介绍如何创建这个RAD工具,以便我们能够查看使这一切成为可能的源代码。
关注点
虽然市面上有很多PHP生成器,但我想要一些易于使用且具有我所需灵活性的工具,以帮助我使用MySQL作为后端进行移动应用程序开发。在那里,我有一些表存在关联,但这些关联很小,以至于只是根据一个表更新另一个表的一个字段。我想要重用功能,以及在不键入脚本而是仅仅生成它们的情况下创建代码的重复能力。
RAD工具使软件开发者的生活变得轻松,从而能够聪明地工作,因为有时我们会不得不一遍又一遍地执行重复性任务。面对这样的挑战,这些工具为开发人员提供了快速工作的途径,以满足严格的截止日期,如果遵循传统的做事方式,这些截止日期可能无法按时完成。
互联网上存在着大量的RAD工具,它们可以做不同的事情。这是我在这里CodeProject上讨论的第二个RAD工具。第一个工具 在此,用于快速创建CRUD JQuery Mobile应用程序,名为JQM.Show。现在我刚刚学会了PHP和MySQL集成,该工具将被更新以连接到MySQL后端。我现在非常兴奋。