您现在的位置是:首页 > 技术教程 正文

240203 PHP、SQL、Mysql学习

admin 阅读: 2024-03-17
后台-插件-广告管理-内容页头部广告(手机)

一、PHP学习

1、基本语法

- PHP标记 :  PHP 代码可以嵌入到 HTML 中

  1. <?php
  2. // PHP 代码在这里
  3. ?>

-  使用 // 进行单行注释,使用 /* */ 进行多行注释

- 变量: 在 PHP 中,变量以 $ 符号开头,后面跟着变量名,变量名区分大小写

  1. $name = "John";
  2. $age = 25;

- 数据类型 包括整数、浮点数、字符串、布尔值等,变量在使用时不需要显式声明类型

  1. $integerVar = 42;
  2. $floatVar = 3.14;
  3. $stringVar = "Hello, PHP!";
  4. $boolVar = true;

- 运算符  +、-、*、/、==、!=、&&、|| 等

  1. $result = $num1 + $num2;
  2. $isTrue = ($value1 == $value2) && ($value3 != $value4);

- 控制结构 PHP 支持常见的控制结构,如条件语句(if、else、elseif)、循环语句(for、while、foreach)等

  1. if ($condition) {
  2. // 如果条件为真执行这里的代码
  3. } else {
  4. // 如果条件为假执行这里的代码
  5. }
  6. for ($i = 0; $i < 5; $i++) {
  7. // 循环执行的代码
  8. }

- 函数以 function 关键字开始,后面跟着函数名和参数列表

  1. function greet($name) {
  2. echo "Hello, $name!";
  3. }
  4. greet("Alice");

- 数组索引数组使用数字索引,而关联数组使用字符串键名

  1. $fruits = array("apple", "orange", "banana");
  2. $person = array("name" => "John", "age" => 25);

2、PHP处理表单数据

-  首先,在 HTML 文件中创建一个表单,指定表单的提交方法(通常是 POST 或 GET)和目标页面(通常是当前页面或者处理表单数据的 PHP 文件)

  1. "process_form.php" method="post">
  2. Name: "text" name="name">
  3. Email: "text" name="email">
  4. "submit" value="Submit">

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

  1. $name = $_POST['name'];
  2. $email = $_POST['email'];
  3. /*或*/
  4. $name = $_GET['name'];
  5. $email = $_GET['email'];

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

  1. // 数据验证
  2. if (!empty($name) && !empty($email)) {
  3. echo "Name: $name
    "
    ;
  4. echo "Email: $email
    "
    ;
  5. } else {
  6. echo "Name and email are required fields.";
  7. }

3、PHP数据库连接

-  使用 mysqli_connect 函数建立到 MySQL 数据库的连接

  1. $servername = "localhost";
  2. $username = "root";
  3. $password = "";
  4. $dbname = "your_database_name";
  5. $conn = mysqli_connect($servername, $username, $password, $dbname);
  6. // 检查连接是否成功
  7. if (!$conn) {
  8. die("Connection failed: " . mysqli_connect_error());
  9. }

-  使用 mysqli_query 函数执行 SQL 查询

  1. $sql = "SELECT id, name, email FROM users";
  2. $result = mysqli_query($conn, $sql);
  3. if ($result) {
  4. // 处理查询结果
  5. while ($row = mysqli_fetch_assoc($result)) {
  6. echo "ID: " . $row["id"] . ", Name: " . $row["name"] . ", Email: " . $row["email"] . "
    "
    ;
  7. }
  8. } else {
  9. echo "Error: " . mysqli_error($conn);
  10. }

- 在完成数据库操作后,使用 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语句:

  1. CREATE TABLE table_name (
  2. column1 datatype constraints,
  3. column2 datatype constraints,
  4. ...
  5. columnN datatype constraints
  6. );

数据类型和约束:

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

  1. UPDATE table_name
  2. SET column1 = value1, column2 = value2, ...
  3. WHERE condition;
  1. DELETE FROM table_name
  2. WHERE condition;

- 复杂查询
WHERE条件:
WHERE条件用于过滤检索结果,只返回满足条件的记录。可以在SELECT、UPDATE和DELETE语句中使用WHERE条件

  1. SELECT *
  2. FROM employees
  3. WHERE age >= 30;


JOIN操作:

JOIN操作用于将两个或多个表中的行结合起来,根据一定的关联条件合并这些表。常见的JOIN类型包括INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN

  1. SELECT employees.*, departments.department_name FROM employees
  2. INNER JOIN departments ON employees.department_id = departments.department_id;

4、数据类型和函数

- 常用数据类型
整数、浮点数、字符串等

- 常用函数
聚合函数、字符串函数、日期函数

5、表之间的关系

-  主键和外键

主键(PRIMARY KEY)

主键是一列(或一组列),其值能够唯一标识表中的每一行数据。主键的特点包括:

  • 唯一性:主键值在整个表中必须是唯一的。
  • 非空:主键列的值不能为NULL。
  • 唯一标识:主键用于标识表中的每一行。

通常情况下,每个表都应该有一个主键。常见的做法是将一个名为id的自增字段作为主键。

外键(FOREIGN KEY)

外键是表中的一列或一组列,其值是另一个表中的主键。外键用于在两个表之间建立关联关系。外键的特点包括:

  • 引用关系:外键列的值必须是另一个表中存在的主键值。
  • 数据完整性:外键用于确保表之间的关联关系是有效的。

通过使用外键约束,可以确保数据的完整性,避免不一致或无效的关联。

PRIMARY KEY和FOREIGN KEY约束:

PRIMARY KEY约束用于指定一列或一组列作为表的主键。如果在定义表时指定了主键约束,则这些列的值将被唯一标识表中的每一行

  1. CREATE TABLE employees (
  2. id INT PRIMARY KEY,
  3. name VARCHAR(100),
  4. department_id INT
  5. );

FOREIGN KEY约束用于指定一列或一组列作为外键,并定义它们与另一个表中的主键之间的关系

  1. CREATE TABLE departments (
  2. id INT PRIMARY KEY,
  3. name VARCHAR(100)
  4. );
  5. CREATE TABLE employees (
  6. id INT PRIMARY KEY,
  7. name VARCHAR(100),
  8. department_id INT,
  9. FOREIGN KEY (department_id) REFERENCES departments(id)
  10. );


表之间的关联:

通过主键和外键约束,可以在表之间建立关联关系。这种关联关系使得在一个表中的更改可以影响到另一个表中的数据,从而保持数据的一致性和完整性。

6、 联合查询  


使用JOIN合并数据:

JOIN操作用于合并两个或多个表中的数据,基于一定的关联条件,将它们的行连接起来。在SQL中,常见的JOIN类型包括INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN

  1. SELECT orders.order_id, customers.customer_name
  2. FROM orders
  3. INNER JOIN customers ON orders.customer_id = customers.customer_id;


UNION操作符:

UNION操作符用于合并两个或多个SELECT语句的结果集,它将消除重复的行。要使用UNION,被合并的SELECT语句的列数和数据类型必须一致。

  1. SELECT employee_id, employee_name
  2. FROM employees
  3. WHERE department_id = 1
  4. UNION
  5. SELECT employee_id, employee_name
  6. FROM temporary_employees
  7. 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)或角色来管理的。不同数据库管理系统可能有不同的语法

  1. // 创建角色:
  2. CREATE ROLE 'rolename';
  3. // 为用户分配角色:
  4. GRANT 'rolename' TO 'username'@'hostname';
  5. // 授予角色权限:
  6. GRANT SELECT, INSERT ON database_name.table_name TO 'rolename';
  7. // 将角色赋予用户:
  8. GRANT 'rolename' TO 'username'@'hostname';

- 数据库安全性
(1)防范SQL注入:

SQL注入是一种常见的攻击方式,攻击者通过在用户输入中注入恶意的SQL代码,从而执行未经授权的数据库操作。以下是防范SQL注入的一些方法:

参数化查询:使用参数化的SQL查询语句,而不是直接拼接用户输入。这样可以防止恶意代码的注入

  1. -- 例子(使用参数化查询)
  2. 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数据库学习不仅有助于提升应用程序性能,还培养了对数据管理的敏感性和技能。不断学习和实践,善用学习资源,将有助于更好地应对日常的数据库管理任务,为数据驱动的应用程序的成功运行提供坚实的基础。


标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索
排行榜