240203 PHP、SQL、Mysql学习
后台-插件-广告管理-内容页头部广告(手机) |
一、PHP学习
1、基本语法
- PHP标记 : PHP 代码可以嵌入到 HTML 中
- <?php
- // PHP 代码在这里
- ?>
- 使用 // 进行单行注释,使用 /* */ 进行多行注释
- 变量: 在 PHP 中,变量以 $ 符号开头,后面跟着变量名,变量名区分大小写
- $name = "John";
- $age = 25;
- 数据类型: 包括整数、浮点数、字符串、布尔值等,变量在使用时不需要显式声明类型
- $integerVar = 42;
- $floatVar = 3.14;
- $stringVar = "Hello, PHP!";
- $boolVar = true;
- 运算符: +、-、*、/、==、!=、&&、|| 等
- $result = $num1 + $num2;
- $isTrue = ($value1 == $value2) && ($value3 != $value4);
- 控制结构: PHP 支持常见的控制结构,如条件语句(if、else、elseif)、循环语句(for、while、foreach)等
- if ($condition) {
- // 如果条件为真执行这里的代码
- } else {
- // 如果条件为假执行这里的代码
- }
- for ($i = 0; $i < 5; $i++) {
- // 循环执行的代码
- }
- 函数:以 function 关键字开始,后面跟着函数名和参数列表
- function greet($name) {
- echo "Hello, $name!";
- }
- greet("Alice");
- 数组:索引数组使用数字索引,而关联数组使用字符串键名
- $fruits = array("apple", "orange", "banana");
- $person = array("name" => "John", "age" => 25);
2、PHP处理表单数据
- 首先,在 HTML 文件中创建一个表单,指定表单的提交方法(通常是 POST 或 GET)和目标页面(通常是当前页面或者处理表单数据的 PHP 文件)
- Name: "text" name="name">
- Email: "text" name="email">
- "submit" value="Submit">
- 通过 $_POST 或 $_GET 超全局数组来接收表单提交的数据
- $name = $_POST['name'];
- $email = $_POST['email'];
- /*或*/
- $name = $_GET['name'];
- $email = $_GET['email'];
- 一旦接收到表单数据,你可以对其进行处理,例如验证数据、清理数据、保存到数据库等
- // 数据验证
- if (!empty($name) && !empty($email)) {
- echo "Name: $name
"; - echo "Email: $email
"; - } else {
- echo "Name and email are required fields.";
- }
3、PHP数据库连接
- 使用 mysqli_connect 函数建立到 MySQL 数据库的连接
- $servername = "localhost";
- $username = "root";
- $password = "";
- $dbname = "your_database_name";
- $conn = mysqli_connect($servername, $username, $password, $dbname);
- // 检查连接是否成功
- if (!$conn) {
- die("Connection failed: " . mysqli_connect_error());
- }
- 使用 mysqli_query 函数执行 SQL 查询
- $sql = "SELECT id, name, email FROM users";
- $result = mysqli_query($conn, $sql);
- if ($result) {
- // 处理查询结果
- while ($row = mysqli_fetch_assoc($result)) {
- echo "ID: " . $row["id"] . ", Name: " . $row["name"] . ", Email: " . $row["email"] . "
"; - }
- } else {
- echo "Error: " . mysqli_error($conn);
- }
- 在完成数据库操作后,使用 mysqli_close 函数关闭连接
mysqli_close($conn);4、PHP框架和库
PHP生态系统中有许多框架和库,它们提供了各种功能,从简化数据库访问到构建全功能的Web应用程序
框架(Frameworks):
- Laravel:
一个优雅的、流行的MVC框架,提供强大的ORM(Eloquent)和一系列工具,适用于构建现代Web应用
- Symfony:
高度可扩展的框架,被许多大型项目广泛使用,它是一组独立的组件的集合,可用于解决各种问题
- CodeIgniter:
轻量级的框架,适用于需要简单、快速的应用程序。它具有小巧、高性能的特点
- Yii:
高性能的MVC框架,支持缓存、AJAX等特性,适用于构建大规模Web应用
- Phalcon:
一个用C语言编写的高性能框架,以扩展PHP的方式提供
库(Libraries):
- Composer:
PHP的依赖管理工具,允许你定义和安装项目依赖
- Guzzle:
用于HTTP请求的强大PHP库,支持多种协议和选项
- Monolog:
灵活的日志库,可用于记录日志到不同的目标,例如文件、数据库等
- Twig:
现代的PHP模板引擎,提供可读性强、安全、高性能的模板渲染
- PHPUnit:
测试框架,用于编写和运行单元测试。对于测试驱动开发(TDD)和行为驱动开发(BDD)很有用
- Swift Mailer:
邮件发送库,用于发送电子邮件,支持SMTP、Mail、Sendmail等邮件传输方式
- Doctrine:
数据库抽象层和ORM,可以与各种数据库交互,提供了灵活的数据访问
选择框架或库通常取决于项目的规模、需求和个人偏好。例如,Laravel适用于构建现代、全功能的Web应用,而CodeIgniter可能更适用于小型项目或那些需要轻量级框架的情况。
5、心得总结
学习PHP需要不断地实践和编码,通过解决实际的问题和构建项目,我深入了解了PHP的各种特性和功能。每次编码都是一次学习的机会,无论是遇到错误还是发现新的技巧,都能让我不断进步。扎实的基础知识对于学习PHP至关重要。深入理解基本语法、数据类型、函数等概念,是掌握更高级特性和框架的基础。在学习过程中,我发现对基础知识的扎实掌握能够让我更加自信地应对复杂的问题。
二、SQL学习
学习SQL是掌握数据库管理和数据操作的关键一步。
1. 数据库基础概念:
- 数据库(Database): 数据的集合,可通过结构化查询语言(SQL)进行管理和操作。
- 表(Table): 数据在数据库中的组织形式,类似于电子表格。
- 字段(Column): 表中的一列,存储特定类型的数据。
- 行(Row): 表中的一条记录,包含一组相关的数据。
2. SQL语法基础:
- SELECT语句: 用于从表中检索数据
SELECT column1, column2 FROM table_name WHERE condition;- INSERT语句: 用于向表中插入新数据
INSERT INTO table_name (column1, column2) VALUES (value1, value2);- UPDATE语句: 用于更新表中的数据
UPDATE table_name SET column1 = value1 WHERE condition;- DELETE语句: 用于删除表中的数据
DELETE FROM table_name WHERE condition;3. 数据过滤和排序:
- WHERE子句: 用于筛选满足特定条件的数据
- ORDER BY子句: 用于对结果进行排序
SELECT column1, column2 FROM table_name WHERE condition ORDER BY column1 ASC;4. 聚合函数和分组:
- COUNT(): 计算行数
- SUM()、AVG()、MIN()、MAX(): 计算列的总和、平均值、最小值、最大值
- GROUP BY子句: 对结果进行分组
SELECT column1, COUNT(*) FROM table_name GROUP BY column1;5. 连接(JOIN):
- INNER JOIN、LEFT JOIN、RIGHT JOIN: 不同的连接方式用于关联多个表的数据
SELECT column1, column2 FROM table1 INNER JOIN table2 ON table1.column = table2.column;6. 子查询:
- 在SELECT语句中嵌套另一个SELECT语句,用于实现更复杂的查询
7. 索引和优化:
- 索引(Index): 提高检索数据速度的数据结构
- EXPLAIN语句: 用于分析SQL查询的执行计划,帮助优化查询性能
8. 事务管理:
- BEGIN TRANSACTION、COMMIT、ROLLBACK: 用于处理数据库事务
9. 安全性和防范SQL注入:
- 使用预处理语句和参数绑定: 防范SQL注入攻击
10. 视图和存储过程:
- CREATE VIEW: 创建虚拟表,简化复杂查询
- CREATE PROCEDURE: 创建存储过程,实现可重用的数据库操作
11. 数据库设计原则:
- 正规化(Normalization): 设计表结构以减少数据冗余和提高数据一致性
三、Mysql数据库
1、数据库基础概念
- 关系型数据库:
数据库的定义:
(1)数据组织: 数据库通过表格的形式将数据组织起来,每个表格包含了相关联的数据。
(2)数据关系: 数据库允许不同表格之间建立关系,通过这些关系可以更好地组织和管理数据。
(3)数据存储: 数据库管理系统(DBMS)负责将数据以结构化的方式存储在计算机上。
数据库的作用:
-
数据存储: 数据库提供了一个持久化的存储方式,确保数据在计算机关机或重启后仍然可用。
-
数据检索: 数据库系统允许用户通过查询语言检索特定条件下的数据,使得数据的获取变得更为灵活和高效。
-
数据更新: 用户可以通过数据库系统对数据进行添加、修改和删除等操作,确保数据的实时性和准确性。
-
数据安全性: 数据库系统提供了权限控制和安全性机制,确保只有经过授权的用户能够访问、修改或删除数据。
-
数据共享: 多个用户可以同时访问数据库,实现数据的共享与协同工作。
-
数据完整性: 数据库系统通过各种约束(如主键、外键等)来维护数据的完整性,确保数据的准确性和一致性
- MySQL介绍:
MySQL是一个开源的关系型数据库管理系统(RDBMS),是目前最流行的数据库之一。它由瑞典MySQL AB公司开发,并由Oracle公司持有和维护。MySQL以其高性能、可靠性和易用性而闻名,广泛应用于各种Web应用程序和大型企业级系统中。
2、创建和管理数据库对象
- 创建数据库
在MySQL中,要创建一个新的数据库,可以使用CREATE DATABASE语句:
使用图形化工具创建数据库:
(1)phpMyAdmin: phpMyAdmin是一个流行的开源数据库管理工具,可通过Web浏览器访问。它提供了创建数据库的选项,用户只需填写数据库名称并点击按钮即可创建。
(2)MySQL Workbench: MySQL Workbench是由MySQL官方提供的图形化工具,支持数据库的创建、管理和维护。用户可以在界面中轻松创建新数据库。
(3)Navicat for MySQL: Navicat是一款商业数据库管理工具,支持多种数据库系统,包括MySQL。它提供了创建数据库的功能,并具有丰富的特性和工具。
- 创建表和字段
CREATE TABLE语句:
- CREATE TABLE table_name (
- column1 datatype constraints,
- column2 datatype constraints,
- ...
- columnN datatype constraints
- );
数据类型和约束:
在CREATE TABLE语句中,数据类型和约束对于定义表中的字段非常重要
(1)数据类型:
- INT: 用于整数。
- VARCHAR(n): 用于可变长度字符串,n表示最大长度。
- DECIMAL(p, s): 用于带有固定小数点的精确数值,p表示总位数,s表示小数位数。
(2)约束:
- PRIMARY KEY: 定义主键,确保每条记录都有唯一的标识符。
- NOT NULL: 确保字段不允许为空值。
- UNIQUE: 确保字段的值在表中是唯一的。
- DEFAULT: 为字段设置默认值,当插入新记录时,如果未提供该字段的值,将使用默认值
3、数据操作和查询
- 插入数据
INSERT INTO语句:
数据完整性和约束:
- 主键约束(PRIMARY KEY): 确保列中的值是唯一且不为空,用于唯一标识表中的每一行。
- 唯一约束(UNIQUE): 确保列中的值是唯一的,但允许空值。
- 非空约束(NOT NULL): 确保列中的值不为空。
- 默认约束(DEFAULT): 为列指定默认值,当插入数据时未提供值时,将使用默认值。
- 外键约束(FOREIGN KEY): 定义表与表之间的关系,确保引用完整性。
-更新和删除数据
UPDATE和DELETE语句:
- UPDATE table_name
- SET column1 = value1, column2 = value2, ...
- WHERE condition;
- DELETE FROM table_name
- WHERE condition;
- 复杂查询
WHERE条件:
WHERE条件用于过滤检索结果,只返回满足条件的记录。可以在SELECT、UPDATE和DELETE语句中使用WHERE条件
- SELECT *
- FROM employees
- WHERE age >= 30;
JOIN操作:
JOIN操作用于将两个或多个表中的行结合起来,根据一定的关联条件合并这些表。常见的JOIN类型包括INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN
- SELECT employees.*, departments.department_name FROM employees
- INNER JOIN departments ON employees.department_id = departments.department_id;
4、数据类型和函数
- 常用数据类型
整数、浮点数、字符串等
- 常用函数
聚合函数、字符串函数、日期函数
5、表之间的关系
- 主键和外键
主键(PRIMARY KEY)
主键是一列(或一组列),其值能够唯一标识表中的每一行数据。主键的特点包括:
- 唯一性:主键值在整个表中必须是唯一的。
- 非空:主键列的值不能为NULL。
- 唯一标识:主键用于标识表中的每一行。
通常情况下,每个表都应该有一个主键。常见的做法是将一个名为id的自增字段作为主键。
外键(FOREIGN KEY)
外键是表中的一列或一组列,其值是另一个表中的主键。外键用于在两个表之间建立关联关系。外键的特点包括:
- 引用关系:外键列的值必须是另一个表中存在的主键值。
- 数据完整性:外键用于确保表之间的关联关系是有效的。
通过使用外键约束,可以确保数据的完整性,避免不一致或无效的关联。
PRIMARY KEY和FOREIGN KEY约束:
PRIMARY KEY约束用于指定一列或一组列作为表的主键。如果在定义表时指定了主键约束,则这些列的值将被唯一标识表中的每一行
- CREATE TABLE employees (
- id INT PRIMARY KEY,
- name VARCHAR(100),
- department_id INT
- );
FOREIGN KEY约束用于指定一列或一组列作为外键,并定义它们与另一个表中的主键之间的关系
- CREATE TABLE departments (
- id INT PRIMARY KEY,
- name VARCHAR(100)
- );
- CREATE TABLE employees (
- id INT PRIMARY KEY,
- name VARCHAR(100),
- department_id INT,
- FOREIGN KEY (department_id) REFERENCES departments(id)
- );
表之间的关联:
通过主键和外键约束,可以在表之间建立关联关系。这种关联关系使得在一个表中的更改可以影响到另一个表中的数据,从而保持数据的一致性和完整性。
6、 联合查询
使用JOIN合并数据:
JOIN操作用于合并两个或多个表中的数据,基于一定的关联条件,将它们的行连接起来。在SQL中,常见的JOIN类型包括INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN
- SELECT orders.order_id, customers.customer_name
- FROM orders
- INNER JOIN customers ON orders.customer_id = customers.customer_id;
UNION操作符:
UNION操作符用于合并两个或多个SELECT语句的结果集,它将消除重复的行。要使用UNION,被合并的SELECT语句的列数和数据类型必须一致。
- SELECT employee_id, employee_name
- FROM employees
- WHERE department_id = 1
- UNION
- SELECT employee_id, employee_name
- FROM temporary_employees
- WHERE project_id = 100;
7、安全性和权限管理
- 用户和权限
(1)创建用户和分配权限:
在MySQL中,可以使用CREATE USER语句创建新用户,并为其设置密码
可以使用GRANT语句来分配用户权限
GRANT SELECT, INSERT ON database_name.* TO 'new_user'@'localhost';
(2)数据库访问控制:
数据库访问控制是通过访问控制列表(ACL)或角色来管理的。不同数据库管理系统可能有不同的语法
- // 创建角色:
- CREATE ROLE 'rolename';
- // 为用户分配角色:
- GRANT 'rolename' TO 'username'@'hostname';
- // 授予角色权限:
- GRANT SELECT, INSERT ON database_name.table_name TO 'rolename';
- // 将角色赋予用户:
- GRANT 'rolename' TO 'username'@'hostname';
- 数据库安全性
(1)防范SQL注入:
SQL注入是一种常见的攻击方式,攻击者通过在用户输入中注入恶意的SQL代码,从而执行未经授权的数据库操作。以下是防范SQL注入的一些方法:
参数化查询:使用参数化的SQL查询语句,而不是直接拼接用户输入。这样可以防止恶意代码的注入
- -- 例子(使用参数化查询)
- SELECT * FROM users WHERE username = ? AND password = ?;
输入验证和过滤: 对用户输入进行验证和过滤,确保只允许合法的字符和格式。不信任的输入应该被拒绝。
最小权限原则: 给予应用程序连接数据库的用户最小必要的权限,限制其对数据库的访问。
错误消息处理: 在生产环境中,不要将详细的错误信息暴露给用户。详细的错误信息可能包含数据库结构和查询信息,为攻击者提供了有利条件。
使用ORM: 使用ORM框架,它们通常会处理输入验证和参数化查询,从而减少SQL注入的风险。
(2)数据加密:
数据加密是将敏感数据转换为不可读的形式,以防止未经授权的访问
数据传输加密(Data in Transit Encryption): 使用加密协议(如SSL/TLS)来保护在数据库客户端和服务器之间传输的数据。
数据库列加密(Column-level Encryption): 对数据库中的敏感列进行加密,确保即使数据库被未经授权的用户访问,也无法读取明文数据。
文件加密(File-level Encryption): 对数据库文件进行加密,确保在磁盘上存储的数据受到保护。
全盘加密(Full Disk Encryption): 对整个数据库服务器的硬盘进行加密,以防止物理设备被盗。
密钥管理(Key Management): 确保加密密钥的安全管理,包括密钥的生成、存储、轮换和销毁
8、备份和恢复
- 数据库备份
使用mysqldump工具:
mysqldump 是 MySQL 数据库管理系统提供的一个用于备份数据库的工具。它能够导出数据库中的数据、表结构和其他相关信息,并生成一个 SQL 脚本文件,以便在需要时进行还原
(1)单个数据库备份
mysqldump -u [username] -p[password] [database_name] > [backup_file.sql](2)所有数据库备份
mysqldump -u [username] -p[password] --all-databases > [backup_file.sql](3)备份特定表
mysqldump -u [username] -p[password] [database_name] [table_name] > [backup_file.sql]
定期备份策略:
完整备份(Full Backup): 定期进行完整数据库备份,通常每周或每月一次,取决于数据的变化频率和重要性。
增量备份(Incremental Backup): 在完整备份之后,进行增量备份以捕获自上次备份以来的变化。这可以更频繁地进行,例如每天一次。
定期检查备份的完整性: 定期验证备份文件的完整性,确保它们可以被成功还原。
离线备份: 将备份文件存储在离线位置,以防止在网络攻击或硬件故障时遭受损害。
自动化备份: 使用定时任务或调度工具,自动执行备份操作,减少人为错误和确保备份按计划进行。
备份存储策略: 确保备份存储在安全的地方,有足够的容量,并按时间顺序组织,以便快速检索和还原。
监控备份日志: 定期检查备份日志,确保备份操作成功完成,并及时处理任何异常情况。
- 数据库恢复
从备份中恢复数据:
9、心得体会
学习MySQL数据库是一个富有挑战性和实用价值的过程。通过掌握基础知识、SQL语言的运用,以及深入理解数据库设计、索引优化、事务管理等关键概念,我逐渐领悟到数据库管理的重要性。
此外,数据库安全性和备份恢复策略也是不可忽视的方面。学习如何设置权限、防范潜在的安全威胁,以及定期备份数据,是保障数据安全的关键步骤。
总的来说,MySQL数据库学习不仅有助于提升应用程序性能,还培养了对数据管理的敏感性和技能。不断学习和实践,善用学习资源,将有助于更好地应对日常的数据库管理任务,为数据驱动的应用程序的成功运行提供坚实的基础。
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。
在线投稿:投稿 站长QQ:1888636
后台-插件-广告管理-内容页尾部广告(手机) |