blob: 07cb2e4506a849feb802bb9d34153843c5138f35 [file] [log] [blame]
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
//
= 使用 PHP 创建数据库驱动的应用程序
:jbake-type: tutorial
:jbake-tags: tutorials
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: 使用 PHP 创建数据库驱动的应用程序 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, 使用 PHP 创建数据库驱动的应用程序
本课程介绍在开发愿望列表应用程序时的最后一个预备步骤,即,使用测试数据创建样例数据库。要完成本教程中的步骤,您需要创建一个数据库以存储许愿者的数据。使用 NetBeans IDE,您可以通过 IDE 界面执行所有这些活动。
开始之前,请参见link:wish-list-tutorial-main-page.html[+使用 PHP 创建 CRUD 应用程序 - 主页+]中介绍的教程要求。
当前文档是“在适用于 PHP NetBeans IDE 中创建 CRUD 应用程序”教程的一部分。
[[register-mysql]]
== 注册 MySQL 服务器
如果您未在 IDE 中注册 MySQL 数据库服务器,或者需要有关结合使用 MySQL NetBeans IDE 的常规信息,请参见link:../ide/mysql.html[+连接到 MySQL 数据库+]。
== 创建数据库用户
在创建数据库之前,您需要创建一个数据库用户,并向该用户授予对数据库执行任意操作的权限。在创建数据库用户时,您需要执行以下操作:
* <<connectToMySQLServer,以 root 用户身份连接到 MySQL 服务器>>。
* <<connectToDefaultDatabase,以 root 用户身份连接到 MySQL 系统数据库>>。必须执行该步骤才能运行 SQL 命令以创建用户,这是因为您在未连接到任何数据库的情况下无法运行 SQL 命令。
* <<createUserQuery,执行用于创建用户的 MySQL 语句>>。
1. 启动 IDE,切换至 "Services"(服务)窗口(Ctrl-5 组合键),然后展开 "Databases"(数据库)节点。
2. 要连接到 MySQL 数据库服务器,请导航至 ``MySQL Server`` MySQL 服务器)节点,然后从上下文菜单中选择 "Connect"(连接)。
image::images/mysql-ctxmenu-connect.png[]
. NetBeans IDE 将连接到 MySQL 服务器,检查通过该服务器提供的数据库,检测系统 ``mysql`` 数据库,然后将相应的新节点 ``mysql`` 添加到 "Databases"(数据库)树中。
image::images/mysql_node_added.png[]
. 要执行 SQL 命令,您需要连接到一个数据库。由于仅提供了 MySQL 系统,因此,您需要连接到该系统。
要连接到系统数据库,请导航至 ``mysql`` 节点,然后从上下文菜单中选择 "Connect"(连接)。如果尚未建立连接,则会显示 "New Database Connection"(新建数据库连接)对话框。默认情况下,在 "User Name"(用户名)字段中填写 root。在 "Password"(口令)字段中,输入 root 用户的口令。
NOTE: 如果您以前已连接到 `mysql` 数据库,则此对话框将不显示。而新的连接节点将简单显示在树中。
image::images/create-new-database-connection.png[]
"New Database Connection"(新建数据库连接)对话框显示“已建立连接”消息。单击 "OK"(确定)。此时将在 "Databases"(数据库)树中添加一个名为 ``jdbc:mysql://localhost:3306/mysql`` 的新节点。
. 导航至 ``jdbc:mysql://localhost:3306/mysql`` 节点,然后从上下文菜单中选择 "Execute Command"(执行命令)。
image::images/execute-command.png[]
此时将打开一个 "SQL Command"SQL 命令)窗口。在 "SQL Command"SQL 命令)窗口中,使用类似于以下语句的语法:
[source,sql]
----
CREATE USER 'phpuser'@'localhost' IDENTIFIED BY 'phpuserpw'
----
从上下文菜单中选择 "Run Statement"(运行语句)。如果成功执行该命令,则状态栏将显示 "SQL Statement(s) executed successfully"(已成功执行 SQL 语句)消息。如果显示其他消息,请检查语法并按照消息提示进行操作。
== 创建 Wishlist 数据库
创建数据库:
1. 导航至位于 ``localhost:3306 上的 MySQL 服务器`` 节点,然后从上下文菜单中选择 "Create Database"(创建数据库)。此时将显示 "Create MySQL Database"(创建 MySQL 数据库)对话框。填写以下字段:
* "Database Name"(数据库名称)字段中,输入 wishlist
* 选中 "Grant full access to user"(为用户授予完全访问权限)复选框,并从下拉列表中选择 ``phpuser@localhost`` ,然后单击 "OK"(确定)。
image::images/create-user.png[]
"Grant full access to user"(为用户授予完全访问权限)功能并非始终正常工作。如果该功能无法正常工作,请以 root 用户身份<<EstablishConnection,连接到数据库>>,然后发送 SQL 查询 [examplecode]# ``GRANT ALL ON wishlist.* TO phpuser@localhost`` #。
到数据库的连接显示在树中。但是,该连接用于 `root` 用户。您需要一个用于 `phpuser` 用户的连接。
== 建立到 Wishlist 数据库的连接
在前一部分结束时,您创建了与 `root` 用户连接的 `wishlist` 数据库。现在,您将为 `phpuser` 用户创建一个新连接。
1. "Services"(服务)窗口中,右键单击 "Databases"(数据库)节点,然后选择 "New Connection"(新建连接)。此时将打开 "New Connection Wizard"(新建连接向导)。
image::images/databases-ctxmenu-newconnection.png[]
. "New Connection Wizard"(新建连接向导)的 "Locate Driver"(查找驱动程序)面板中,选择 `MySQL (Connector/J Driver)`MySQLConnector/J 驱动程序)),然后单击 "Next"(下一步)。此时将打开 "Customize Connection"(定制连接)面板。
image::images/locate-driver.png[]
. "Database"(数据库)字段中,键入 `wishlist`
. "User Name"(用户名)和 "Password"(口令)编辑框中,输入在<<CreateUser,创建数据库所有者(用户)>>部分指定的名称和口令(在我们的示例中,分别是 ``phpuser`` ``phpuserpw`` )。单击 "Remember Password"(记住口令)。单击 "Test Connection"(测试连接),如果连接成功,则单击 "OK"(确定)。
image::images/phpuser-connection.png[]
此时将在 "Databases"(数据库)树中显示相应的新连接节点。现在,您可以删除 `root` 用户与 `wishlist` 数据库的连接。单击 ``jdbc:mysql://localhost:3306/wishlist [root on Default schema]`` 连接并选择 "Delete"(删除)。
image::images/new-database-connection-added.png[]
== 设计 Wishlist 数据库的结构
要排列和存储所有必需数据,您需要使用两个表:
* 一个是 wishers 表,用于存储注册用户的名称和口令
* 一个是 wishes 表,用于存储愿望说明
image::images/wishlist-db.png[]
wishers 表包含三个字段:
1. id - 许愿者的唯一 ID。该字段用作主键
2. name
3. password
wishes 表包含四个字段:
1. id - 愿望的唯一 ID。该字段用作主键
2. wisher_id - 愿望所属的许愿者的 ID。该字段用作外键。
3. description
4. due_date - 请求愿望时的日期
这些表通过许愿者的 ID 相关联。除了 wishes 表中的 due_date 以外,所有字段都是必填的。
== 创建表
1. 要连接到数据库,请在 ``jdbc:mysql://localhost:3306/wishlist`` 连接上单击鼠标右键,然后从上下文菜单中选择 "Connect"(连接)。
NOTE: 如果禁用了该菜单项,则说明您已建立了连接。继续执行步骤 2
. 从上述上下文菜单中选择 "Execute Command"(执行命令)。此时将打开一个空的 "SQL Command"SQL 命令)窗口。
. 创建 wishers 表:
. 键入以下 SQL 查询(请注意,您需要将字符集明确设置为 UTF-8 以实现国际化):
[source,sql]
----
CREATE TABLE wishers(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name CHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL UNIQUE,password CHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL)
----
NOTE: 可通过为某个字段指定 AUTO_INCREMENT 属性,从 MySQL 中获取自动生成的唯一数字。MySQL 会通过增加表的最后一个数字来生成一个唯一数字,并自动将其添加到自动递增的字段中。在我们的示例中,"ID" 字段是自动递增的。
. 在查询上单击鼠标右键,然后从上下文菜单中选择 "Run Statement"(运行语句)。
NOTE: MySQL 的默认存储引擎是 MyISAM,它不支持外键。如果要使用外键,请考虑将 InnoDB 用作存储引擎。
. 创建 wishes 表:
. 键入以下 SQL 查询:
[source,sql]
----
CREATE TABLE wishes(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,wisher_id INT NOT NULL,description CHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,due_date DATE,FOREIGN KEY (wisher_id) REFERENCES wishers(id))
----
. 在查询上单击鼠标右键,然后从上下文菜单中选择 "Run Statement"(运行语句)。
. 要验证新表是否添加到数据库中,请切换至 "Services"(服务)窗口,然后导航至 jdbc:mysql://localhost:3306/wishlist 连接节点。
. 单击鼠标右键,然后选择 "Refresh"(刷新)。此时将在树中显示 wishers wishes 节点。
注:您可以在link:https://netbeans.org/projects/www/downloads/download/php%252FSQL-files-for-MySQL.zip[+此处+]下载一组 SQL 命令以创建 MySQL wishlist 数据库。
== 输入测试数据
要测试应用程序,您需要使用数据库中的某些数据。下面的示例说明了如何添加两个许愿者和四个愿望。
. jdbc:mysql://localhost:3306/wishlist 连接上单击鼠标右键,然后选择 "Execute Command"(执行命令)。此时将打开一个空的 "SQL Command"(SQL 命令)窗口。
. 要添加许愿者,请使用类似下面示例的语法:
[source,sql]
----
INSERT INTO wishers (name, password) VALUES ('Tom', 'tomcat');
----
在查询上单击鼠标右键,然后从上下文菜单中选择 "Run Statement"(运行语句)。
NOTE: 语句不包含 ``id`` 字段的值。此时将会自动输入值,因为字段类型已指定为 ``AUTO_INCREMENT``
输入另一个测试许愿者:
[source,sql]
----
INSERT INTO wishers (name, password) VALUES ('Jerry', 'jerrymouse');
----
. 要添加愿望,请使用类似下面示例的语法:
[source,sql]
----
INSERT INTO wishes (wisher_id, description, due_date) VALUES (1, 'Sausage', 080401);INSERT INTO wishes (wisher_id, description) VALUES (1, 'Icecream');INSERT INTO wishes (wisher_id, description, due_date) VALUES (2, 'Cheese', 080501);INSERT INTO wishes (wisher_id, description)VALUES (2, 'Candle');
----
选择查询,在每个查询上单击鼠标右键,然后从上下文菜单中选择 "Run Selection"(运行选择)。
NOTE: 您还可以依次执行查询,如第 2 项所述。
. 要查看测试数据,请在相关表上单击鼠标右键,然后从上下文菜单中选择 "View Data"(查看数据)。
image::images/view-test-data.png[]
要大致了解数据库原理和设计模式,请查阅以下教程:link:http://www.tekstenuitleg.net/en/articles/database_design_tutorial/1[+http://www.tekstenuitleg.net/en/articles/database_design_tutorial/1+]。
有关 MySQL ``CREATE TABLE`` 语句语法的详细信息,请参见 link:http://dev.mysql.com/doc/refman/5.0/en/create-table.html[+http://dev.mysql.com/doc/refman/5.0/en/create-table.html+]。
有关在表中插入值的详细信息,请参见 link:http://dev.mysql.com/doc/refman/5.0/en/insert.html[+http://dev.mysql.com/doc/refman/5.0/en/insert.html+]。
注:您可以在link:https://netbeans.org/projects/www/downloads/download/php%252FSQL-files-for-MySQL.zip[+此处+]下载一组 SQL 命令以创建 MySQL wishlist 数据库。
== 后续步骤
link:wish-list-lesson2.html[+下一课 >>+]
link:wish-list-tutorial-main-page.html[+返回到教程主页+]
link:/about/contact_form.html?to=3&subject=Feedback:%20PHP%20Wish%20List%20CRUD%201:%20Create%20MySQL%20Database[+请将您的反馈意见发送给我们+]
要发送意见和建议、获得支持以及随时了解 NetBeans IDE PHP 开发功能的最新开发情况,请link:../../../community/lists/top.html[+加入 users@php.netbeans.org 邮件列表+]。
link:../../trails/php.html[+返回至 PHP 学习资源+]