当前位置: 首页 > news >正文

PHP入门教程5:会话管理和数据库操作

PHP入门教程5:会话管理和数据库操作

在前几篇文章中,我们学习了PHP的基础语法、控制结构、函数的使用、数组和字符串的操作,以及文件处理和表单处理。本文将重点介绍PHP中的会话管理和数据库操作,这是构建动态网站和Web应用程序的重要内容。本文将包含以下几个部分:

  1. 会话管理
  2. 使用Cookies
  3. 数据库基础
  4. 连接数据库
  5. 执行SQL查询
  6. 防止SQL注入

1. 会话管理

会话管理用于在多个页面之间保存用户信息。PHP通过session来管理会话。

启动会话

使用 session_start() 函数启动会话。在使用会话变量之前必须调用该函数。

<?php
session_start();
$_SESSION["username"] = "小明";
echo "会话已启动,用户名是: " . $_SESSION["username"];
?>
销毁会话

使用 session_destroy() 函数销毁会话。

<?php
session_start();
session_destroy();
echo "会话已销毁";
?>

2. 使用Cookies

Cookies用于在客户端保存少量数据。PHP通过 setcookie() 函数设置Cookie。

设置Cookie
<?php
setcookie("username", "小明", time() + (86400 * 30), "/"); // 86400 = 1 天
echo "Cookie 已设置";
?>
读取Cookie
<?php
if (isset($_COOKIE["username"])) {echo "用户名是: " . $_COOKIE["username"];
} else {echo "未设置Cookie";
}
?>
删除Cookie
<?php
setcookie("username", "", time() - 3600, "/");
echo "Cookie 已删除";
?>

3. 数据库基础

PHP通常与MySQL数据库一起使用。我们需要以下几个步骤来操作数据库:

  1. 连接数据库
  2. 选择数据库
  3. 执行SQL查询
  4. 获取查询结果
  5. 关闭数据库连接

4. 连接数据库

使用 mysqli_connect() 函数连接数据库。

<?php
$servername = "localhost";
$username = "用户名";
$password = "密码";
$dbname = "数据库名";// 创建连接
$conn = mysqli_connect($servername, $username, $password, $dbname);// 检测连接
if (!$conn) {die("连接失败: " . mysqli_connect_error());
}
echo "连接成功";
?>

5. 执行SQL查询

执行SQL查询需要使用 mysqli_query() 函数。

插入数据
<?php
$sql = "INSERT INTO Students (name, age) VALUES ('小明', 20)";if (mysqli_query($conn, $sql)) {echo "新记录插入成功";
} else {echo "错误: " . $sql . "<br>" . mysqli_error($conn);
}
?>
查询数据
<?php
$sql = "SELECT id, name, age FROM Students";
$result = mysqli_query($conn, $sql);if (mysqli_num_rows($result) > 0) {while($row = mysqli_fetch_assoc($result)) {echo "id: " . $row["id"]. " - 姓名: " . $row["name"]. " - 年龄: " . $row["age"]. "<br>";}
} else {echo "0 结果";
}
?>
更新数据
<?php
$sql = "UPDATE Students SET age=21 WHERE name='小明'";if (mysqli_query($conn, $sql)) {echo "记录更新成功";
} else {echo "错误: " . $sql . "<br>" . mysqli_error($conn);
}
?>
删除数据
<?php
$sql = "DELETE FROM Students WHERE name='小明'";if (mysqli_query($conn, $sql)) {echo "记录删除成功";
} else {echo "错误: " . $sql . "<br>" . mysqli_error($conn);
}
?>

6. 防止SQL注入

SQL注入是通过将恶意SQL代码插入SQL查询字符串中来攻击数据库的一种方式。防止SQL注入的方法是使用准备语句和参数化查询。

使用准备语句
<?php
$stmt = $conn->prepare("INSERT INTO Students (name, age) VALUES (?, ?)");
$stmt->bind_param("si", $name, $age);// 设置参数并执行
$name = "小明";
$age = 20;
$stmt->execute();echo "新记录插入成功";$stmt->close();
$conn->close();
?>

小结

在这篇文章中,我们学习了PHP中的会话管理和数据库操作,包括启动和销毁会话、设置和读取Cookies、连接数据库、执行SQL查询以及防止SQL注入的方法。这些内容是构建动态Web应用程序的核心。在下一篇文章中,我们将探讨PHP中的面向对象编程(OOP)。希望你能通过这个系列文章,逐步掌握PHP编程,并能应用于实际项目中。

相关文章:

  • 【云原生】docker swarm 使用详解
  • ESP32 BLE学习(1) — GAP和GATT回调函数作用
  • 【仿真建模-anylogic】ConveyorCustomStation原理解析
  • Zabbix自定义监控JAVA进程
  • Go基础编程 - 05 - 数组与切片
  • (一)SvelteKit教程:hello world
  • windows桌面运维----第三天
  • CCAA质量管理【学习笔记】​​ 备考知识点笔记(三)质量管理方法与常见工具
  • 了解并解决 Flutter 中的灰屏问题
  • 瞬间将模型改为原来的60-200倍小
  • PHP框架详解 - CakePHP框架
  • 细说MCU输出互补型PWM波形时设置死区时间的作用
  • 大数据之Hadoop的特点是什么?有什么优缺点?有哪些发行版本?
  • 军用FPGA软件 Verilog语言的编码准测之触发器、锁存器
  • 各类存储器类型(RAM、ROM、FLASH、DRAM、SRAM)
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • SegmentFault for Android 3.0 发布
  • [iOS]Core Data浅析一 -- 启用Core Data
  • export和import的用法总结
  • PHP 7 修改了什么呢 -- 2
  • redis学习笔记(三):列表、集合、有序集合
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • tab.js分享及浏览器兼容性问题汇总
  • TypeScript实现数据结构(一)栈,队列,链表
  • vue的全局变量和全局拦截请求器
  • 初识MongoDB分片
  • 从零开始的无人驾驶 1
  • 关于extract.autodesk.io的一些说明
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 深度学习入门:10门免费线上课程推荐
  • 数据科学 第 3 章 11 字符串处理
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 做一名精致的JavaScripter 01:JavaScript简介
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​io --- 处理流的核心工具​
  • (2)STM32单片机上位机
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (剑指Offer)面试题34:丑数
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • .gitignore文件_Git:.gitignore
  • .NET COER+CONSUL微服务项目在CENTOS环境下的部署实践
  • .Net Core 微服务之Consul(三)-KV存储分布式锁
  • .NET Framework 服务实现监控可观测性最佳实践
  • .Net 基于IIS部署blazor webassembly或WebApi
  • .Net(C#)自定义WinForm控件之小结篇
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • /dev下添加设备节点的方法步骤(通过device_create)
  • :“Failed to access IIS metabase”解决方法
  • @Conditional注解详解
  • @GetMapping和@RequestMapping的区别
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解
  • [1127]图形打印 sdutOJ