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 支持常见的控制结构,如条件语句(ifelseelseif)、循环语句(forwhileforeach)等

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 文件)

<form action="process_form.php" method="post">
    Name: <input type="text" name="name"><br>
    Email: <input type="text" name="email"><br>
    <input type="submit" value="Submit">
</form>

- 通过 $_POST 或 $_GET 超全局数组来接收表单提交的数据

$name = $_POST['name'];
$email = $_POST['email'];
/*或*/
$name = $_GET['name'];
$email = $_GET['email'];

- 一旦接收到表单数据,你可以对其进行处理,例如验证数据、清理数据、保存到数据库等

// 数据验证
if (!empty($name) && !empty($email)) {
    echo "Name: $name<br>";
    echo "Email: $email<br>";
} 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"] . "<br>";
    }
} 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)负责将数据以结构化的方式存储在计算机上。

数据库的作用:

  1. 数据存储: 数据库提供了一个持久化的存储方式,确保数据在计算机关机或重启后仍然可用。

  2. 数据检索: 数据库系统允许用户通过查询语言检索特定条件下的数据,使得数据的获取变得更为灵活和高效。

  3. 数据更新: 用户可以通过数据库系统对数据进行添加、修改和删除等操作,确保数据的实时性和准确性。

  4. 数据安全性: 数据库系统提供了权限控制和安全性机制,确保只有经过授权的用户能够访问、修改或删除数据。

  5. 数据共享: 多个用户可以同时访问数据库,实现数据的共享与协同工作。

  6. 数据完整性: 数据库系统通过各种约束(如主键、外键等)来维护数据的完整性,确保数据的准确性和一致性

- MySQL介绍:

    MySQL是一个开源的关系型数据库管理系统(RDBMS),是目前最流行的数据库之一。它由瑞典MySQL AB公司开发,并由Oracle公司持有和维护。MySQL以其高性能、可靠性和易用性而闻名,广泛应用于各种Web应用程序和大型企业级系统中。

2、创建和管理数据库对象

-  创建数据库
在MySQL中,要创建一个新的数据库,可以使用CREATE DATABASE语句:

CREATE DATABASE database_name;


使用图形化工具创建数据库:

(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语句:

INSERT INTO table_name (column1, column2, ..., columnN) VALUES (value1, value2, ..., valueN);


数据完整性和约束:

  • 主键约束(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条件用于过滤检索结果,只返回满足条件的记录。可以在SELECTUPDATEDELETE语句中使用WHERE条件

SELECT *
FROM employees
WHERE age >= 30;


JOIN操作:

JOIN操作用于将两个或多个表中的行结合起来,根据一定的关联条件合并这些表。常见的JOIN类型包括INNER JOINLEFT JOINRIGHT JOINFULL 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 JOINLEFT JOINRIGHT JOINFULL 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语句创建新用户,并为其设置密码

CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password';

可以使用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): 在完整备份之后,进行增量备份以捕获自上次备份以来的变化。这可以更频繁地进行,例如每天一次。

定期检查备份的完整性: 定期验证备份文件的完整性,确保它们可以被成功还原。

离线备份: 将备份文件存储在离线位置,以防止在网络攻击或硬件故障时遭受损害。

自动化备份: 使用定时任务或调度工具,自动执行备份操作,减少人为错误和确保备份按计划进行。

备份存储策略: 确保备份存储在安全的地方,有足够的容量,并按时间顺序组织,以便快速检索和还原。

监控备份日志: 定期检查备份日志,确保备份操作成功完成,并及时处理任何异常情况。

- 数据库恢复
从备份中恢复数据:

mysql -u [username] -p [new_database_name] < [backup_file.sql]

9、心得体会

学习MySQL数据库是一个富有挑战性和实用价值的过程。通过掌握基础知识、SQL语言的运用,以及深入理解数据库设计、索引优化、事务管理等关键概念,我逐渐领悟到数据库管理的重要性。

此外,数据库安全性和备份恢复策略也是不可忽视的方面。学习如何设置权限、防范潜在的安全威胁,以及定期备份数据,是保障数据安全的关键步骤。

总的来说,MySQL数据库学习不仅有助于提升应用程序性能,还培养了对数据管理的敏感性和技能。不断学习和实践,善用学习资源,将有助于更好地应对日常的数据库管理任务,为数据驱动的应用程序的成功运行提供坚实的基础。


  • 36
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值