PHP基础学习笔记(Web安全方向)
目录
- PHP概述与基础语法
- 变量与数据类型
- 常量与预定义常量
- 运算符
- 控制流程语句
- 数组
- 函数
- 变量作用域
- 面向对象编程(OOP)
- 超级全局变量
- 文件包含(Include/Require)
- 文件与目录操作
- 命名空间
- 正则表达式
- PHP与MySQL交互
- 附录:常用函数速查
1. PHP概述与基础语法
1.1 PHP简介
PHP(Hypertext Preprocessor,超文本预处理器)是一种通用开源脚本语言,主要在服务器端执行。
PHP文件特点:
- 可包含文本、HTML、JavaScript代码和PHP代码
- PHP代码在服务器上执行,结果以纯HTML返回浏览器
- 默认文件扩展名为
.php
PHP主要用途:
| 功能 |
说明 |
| 生成动态页面 |
根据用户请求生成不同内容 |
| 文件操作 |
创建、读取、写入、关闭服务器文件 |
| 表单处理 |
收集并处理表单提交的数据 |
| Cookie/Session |
发送和接收Cookies,管理会话 |
| 数据库交互 |
增删改查数据库中的数据 |
| 访问控制 |
限制用户对页面的访问 |
| 数据加密 |
支持多种加密方式 |
1.2 基本语法格式
PHP代码标记:
<?php
// PHP代码写在这里
?>
注释方式:
// 单行注释(C++风格)
# 单行注释(Shell风格)
/*
多行注释
(C语言风格)
*/
2. 变量与数据类型
2.1 变量命名规则
- 以
$ 符号开头,后跟变量名
- 变量名必须以字母或下划线开头
- 只能包含字母、数字、下划线(A-z、0-9、_)
- 变量名不能包含空格
- 区分大小写
$name = "暗月"; // 合法
$_age = 25; // 合法
$123abc = "test"; // 非法(数字开头)
$user-name = "test"; // 非法(包含连字符)
2.2 八大数据类型
| 数据类型 |
说明 |
示例 |
String(字符串) |
文本数据 |
"hello" |
Integer(整型) |
整数 |
123 |
Float(浮点型) |
小数 |
3.14 |
Boolean(布尔型) |
true/false |
true |
Array(数组) |
多个值的集合 |
array(1,2,3) |
Object(对象) |
类的实例 |
new User() |
NULL(空值) |
无值 |
null |
Resource(资源) |
外部资源(文件、数据库连接等) |
fopen() |
<?php
$a = "字符串类型";
$b = 1234; // 整型
$c = -3.1415; // 浮点型
$d = 8E-3; // 科学计数法
$e = true; // 布尔型
$f = array("A","B","C"); // 数组
$g = NULL; // 空值
// var_dump() 查看变量类型和值
var_dump($a);
var_dump($b);
?>
2.3 整型进制表示
$a = 120; // 十进制
$a = 0b110; // 二进制
$a = 0120; // 八进制
$a = 0x120; // 十六进制
// 进制转换函数
decbin(10); // 十进制转二进制
decoct(10); // 十进制转八进制
dechex(10); // 十进制转十六进制
bindec('1010');// 二进制转十进制
2.4 字符串
<?php
$name = '暗月';
// 双引号:解析变量
$str1 = "这是 $name 的全栈渗透测试培训";
// 输出:这是 暗月 的全栈渗透测试培训
// 单引号:不解析变量,原样输出
$str2 = '这是 $name 的全栈渗透测试培训';
// 输出:这是 $name 的全栈渗透测试培训
// 字符串连接(并置运算符 .)
echo $str1 . " " . $str2;
// 字符串函数示例
echo strlen($str1); // 获取长度
echo strpos($str1, "渗透"); // 查找子串位置
echo md5("123456"); // MD5加密
?>
字符串截取注意事项(中文UTF-8):
// 普通方式截取中文会乱码
for($i=0; $i<strlen($str); $i++) {
echo $str[$i]; // 乱码
}
// 使用正则分割处理中文
function mb_str_split($string) {
return preg_split('/(?<!\^)(?!$)/u', $string);
}
foreach(mb_str_split($str) as $c) {
echo $c; // 正常输出中文
}
3. 常量与预定义常量
3.1 自定义常量
// define(常量名, 常量值, 是否大小写不敏感)
define("SITE_NAME", "暗月安全培训", true);
echo SITE_NAME; // 输出:暗月安全培训
echo site_name; // true时也输出:暗月安全培训
3.2 常用预定义常量
| 常量 |
说明 |
示例输出 |
__FILE__ |
当前脚本的完整路径和文件名 |
/var/www/index.php |
__LINE__ |
当前行号 |
10 |
PHP_VERSION |
PHP版本号 |
7.4.33 |
PHP_OS |
操作系统类型 |
Linux |
DIRECTORY_SEPARATOR |
目录分隔符 |
/ 或 \ |
TRUE / FALSE |
布尔真/假 |
|
NULL |
空值 |
|
<?php
echo __FILE__; // 当前文件路径
echo __LINE__; // 当前行号
echo PHP_VERSION; // PHP版本
echo PHP_OS; // 操作系统
echo DIRECTORY_SEPARATOR; // 目录分隔符
?>
4. 运算符
4.1 算术运算符
| 运算符 |
说明 |
示例 |
+ |
加法 |
$a + $b |
- |
减法 |
$a - $b |
* |
乘法 |
$a * $b |
/ |
除法 |
$a / $b |
% |
取余(模运算) |
$a % $b |
4.2 赋值运算符
| 运算符 |
等价于 |
说明 |
= |
|
赋值 |
+= |
$a = $a + $b |
加后赋值 |
-= |
$a = $a - $b |
减后赋值 |
*= |
$a = $a * $b |
乘后赋值 |
/= |
$a = $a / $b |
除后赋值 |
.= |
$a = $a . $b |
字符串连接赋值 |
4.3 递增/递减运算符
| 运算符 |
说明 |
示例 |
++$a |
先加1,再返回 |
|
$a++ |
先返回,再加1 |
|
--$a |
先减1,再返回 |
|
$a-- |
先返回,再减1 |
|
4.4 比较运算符
| 运算符 |
说明 |
示例 |
== |
等于(值相等) |
$a == $b |
=== |
全等(值和类型都相等) |
$a === $b |
!= / <> |
不等于 |
$a != $b |
!== |
不全等 |
$a !== $b |
> |
大于 |
$a > $b |
< |
小于 |
$a < $b |
>= |
大于等于 |
$a >= $b |
<= |
小于等于 |
$a <= $b |
4.5 逻辑运算符
| 运算符 |
说明 |
示例 |
and / && |
逻辑与(都真才真) |
$a && $b |
or / ` |
|
` |
! |
逻辑非(取反) |
!$a |
xor |
逻辑异或(一真一假才真) |
$a xor $b |
4.6 三元运算符
// 语法:(条件) ? (真时值) : (假时值)
$result = ($age >= 18) ? "成年" : "未成年";
5. 控制流程语句
5.1 条件控制
if...elseif...else:
if ($score >= 90) {
echo "优秀";
} elseif ($score >= 60) {
echo "及格";
} else {
echo "不及格";
}
switch语句:
switch ($day) {
case 1:
echo "星期一";
break;
case 2:
echo "星期二";
break;
default:
echo "未知";
}
5.2 循环控制
while循环:
$i = 1;
while ($i <= 10) {
echo $i;
$i++;
}
do...while循环:
$i = 1;
do {
echo $i;
$i++;
} while ($i <= 10);
for循环:
for ($i = 1; $i <= 10; $i++) {
echo $i;
}
foreach循环(专门用于数组):
$arr = array("a", "b", "c");
foreach ($arr as $value) {
echo $value;
}
$age = array("Peter"=>"35", "Ben"=>"37");
foreach ($age as $key => $value) {
echo "Key=" . $key . ", Value=" . $value;
}
break与continue:
break:终止当前循环
continue:跳过本次循环,继续下一次
6. 数组
6.1 数组类型
| 类型 |
说明 |
示例 |
| 数值数组 |
数字索引(从0开始) |
$arr = array("Volvo","BMW") |
| 关联数组 |
字符串键名 |
$age = array("Peter"=>"35","Ben"=>"37") |
| 多维数组 |
包含一个或多个数组 |
$arr = array(array(1,2), array(3,4)) |
6.2 数组操作
// 创建数组
$cars = array("Volvo", "BMW", "Toyota");
$age = array("Peter"=>"35", "Ben"=>"37");
// 获取长度
echo count($cars);
// 访问元素
echo $cars[0]; // Volvo
echo $age["Peter"]; // 35
// 添加元素(尾部)
array_push($cars, "Honda");
$cars[] = "Honda"; // 同样效果
// 添加关联元素
$age["Tony"] = "40";
// 删除元素
unset($cars[1]); // 删除索引1的元素
// 合并数组
$result = array_merge($cars, $age);
// 插入到指定位置
array_splice($array1, 3, 0, $array2); // 位置3插入$array2
6.3 数组排序函数
| 函数 |
说明 |
sort() |
升序排序(值) |
rsort() |
降序排序(值) |
asort() |
升序排序(保留键值关联) |
ksort() |
按键名升序排序 |
arsort() |
降序排序(保留键值关联) |
krsort() |
按键名降序排序 |
6.4 常用数组函数
| 函数 |
说明 |
is_array($arr) |
判断是否为数组 |
count($arr) |
返回元素个数 |
array_search($value, $arr) |
搜索值,返回键名 |
array_key_exists($key, $arr) |
检查键名是否存在 |
array_unique($arr) |
去除重复值 |
in_array($value, $arr) |
检查值是否存在 |
array_shift($arr) |
移除第一个元素并返回 |
array_unshift($arr, $val) |
在开头插入元素 |
array_pop($arr) |
弹出最后一个元素 |
array_push($arr, $val) |
在末尾插入元素 |
7. 函数
7.1 函数定义与调用
// 定义函数
function sayHi() {
echo "Hello world!";
}
// 调用函数
sayHi();
7.2 带参数的函数
function familyName($fname, $year = 2000) {
echo "$fname Zhang, born in $year<br>";
}
familyName("Li"); // 使用默认$year
familyName("Hong", 1995);
7.3 返回值
function sum($x, $y) {
return $x + $y;
}
echo sum(5, 10); // 15
7.4 匿名函数
// 匿名函数赋值给变量
$greet = function($name) {
return "Hello, $name";
};
echo $greet('moonsec'); // Hello, moonsec
7.5 回调函数
// 使用 call_user_func_array 调用回调
function Speak($a, $b) {
echo "He can speak $a, She can speak $b";
}
function Speak_Test() {
return call_user_func_array('Speak', array('Chinese', 'English'));
}
Speak_Test();
8. 变量作用域
8.1 三种作用域
| 作用域 |
说明 |
local(局部) |
函数内部声明的变量,仅函数内可见 |
global(全局) |
函数外部声明的变量,仅函数外可见 |
static(静态) |
函数执行完后不销毁,保留值 |
$x = 5; // 全局变量
function myTest() {
$y = 10; // 局部变量
// echo $x; // 错误!无法访问全局变量
}
8.2 global关键字
$x = 5;
$y = 10;
function myTest() {
global $x, $y; // 声明使用全局变量
$y = $x + $y;
}
myTest();
echo $y; // 15
8.3 $GLOBALS数组
$x = 5;
$y = 10;
function myTest() {
$GLOBALS['y'] = $GLOBALS['x'] + $GLOBALS['y'];
}
myTest();
echo $y; // 15
8.4 static静态变量
function myTest() {
static $x = 0; // 首次调用初始化,之后保留值
echo $x;
$x++;
}
myTest(); // 0
myTest(); // 1
myTest(); // 2
9. 面向对象编程(OOP)
9.1 类与对象
class Site {
// 成员变量(属性)
var $url;
var $title;
// 成员函数(方法)
function setUrl($par) {
$this->url = $par; // $this 代表当前对象
}
function getUrl() {
echo $this->url;
}
}
// 实例化对象
$site = new Site();
$site->setUrl('www.moonsec.com');
$site->getUrl();
9.2 构造函数(__construct)
class Site {
var $url;
var $title;
// 构造函数:对象创建时自动执行
function __construct($par1, $par2) {
$this->url = $par1;
$this->title = $par2;
}
function getUrl() {
echo $this->url;
}
}
$site = new Site('www.moonsec.com', '暗月安全培训');
9.3 析构函数(__destruct)
class MyClass {
function __construct() {
print "对象创建\n";
}
function __destruct() {
print "对象销毁\n";
}
}
$obj = new MyClass(); // 输出:对象创建
// 脚本结束自动输出:对象销毁
9.4 继承(extends)
class Child_Site extends Site {
var $category;
function setCate($par) {
$this->category = $par;
}
function getCate() {
echo $this->category;
}
// 方法重写(覆盖父类方法)
function getUrl() {
echo "URL: " . $this->url;
}
}
9.5 访问控制(可见性)
| 关键字 |
访问范围 |
public |
任何地方均可访问 |
protected |
自身、父类、子类可访问 |
private |
仅定义该属性的类自身可访问 |
class MyClass {
public $public = 'Public';
protected $protected = 'Protected';
private $private = 'Private';
function printHello() {
echo $this->public; // OK
echo $this->protected; // OK
echo $this->private; // OK(类内部可访问)
}
}
$obj = new MyClass();
echo $obj->public; // OK
// echo $obj->protected; // 错误(类外部不可访问)
// echo $obj->private; // 错误
9.6 接口(interface)
interface iTemplate {
public function setVariable($name, $var);
public function getHtml($template);
}
// 实现接口
class Template implements iTemplate {
private $vars = array();
public function setVariable($name, $var) {
$this->vars[$name] = $var;
}
public function getHtml($template) {
// 实现代码
}
}
9.7 抽象类(abstract)
abstract class Animal {
abstract protected function makeSound();
abstract protected function move($speed);
public function sleep() {
echo "Sleeping...";
}
}
class Dog extends Animal {
protected function makeSound() {
echo "Bark!";
}
public function move($speed) {
echo "Running at $speed km/h";
}
}
9.8 Static(静态)关键字
class Foo {
public static $my_static = 'foo';
public function staticValue() {
return self::$my_static;
}
}
// 无需实例化直接访问
echo Foo::$my_static; // foo
$foo = new Foo();
echo $foo->staticValue(); // foo
9.9 Final 关键字
class BaseClass {
final public function moreTesting() {
// 此方法不能被子类重写
}
}
// 错误:不能重写 final 方法
class ChildClass extends BaseClass {
public function moreTesting() {
// Fatal error
}
}
9.10 调用父类构造函数
class SubClass extends BaseClass {
function __construct() {
parent::__construct(); // 必须手动调用
print "SubClass 构造方法";
}
}
10. 超级全局变量
| 变量 |
说明 |
$GLOBALS |
所有全局变量的数组 |
$_SERVER |
服务器和执行环境信息 |
$_REQUEST |
收集GET、POST、COOKIE数据 |
$_POST |
收集POST提交的数据 |
$_GET |
收集GET提交的数据 |
$_FILES |
文件上传信息 |
$_ENV |
环境变量 |
$_COOKIE |
Cookie数据 |
$_SESSION |
Session数据 |
<?php
// 获取服务器信息
echo $_SERVER['PHP_SELF']; // 当前脚本文件名
echo $_SERVER['SERVER_NAME']; // 服务器主机名
echo $_SERVER['HTTP_HOST']; // 请求的Host头
echo $_SERVER['REMOTE_ADDR']; // 客户端IP
echo $_SERVER['REQUEST_METHOD']; // 请求方法(GET/POST)
?>
11. 文件包含(Include/Require)
11.1 include vs require
| 语句 |
文件不存在时 |
include |
产生警告(E_WARNING),脚本继续执行 |
require |
产生致命错误(E_COMPILE_ERROR),脚本停止 |
include 'header.php';
require 'config.php';
11.2 include_once / require_once
确保文件只被包含一次(避免重复定义函数/类错误)。
include_once 'config.php';
require_once 'functions.php';
12. 文件与目录操作
12.1 文件读取
// 读取整个文件(直接输出)
readfile("webdictionary.txt");
// 打开文件
$myfile = fopen("webdictionary.txt", "r") or die("无法打开文件!");
// 读取全部内容
echo fread($myfile, filesize("webdictionary.txt"));
// 读取单行
echo fgets($myfile);
// 读取单个字符
echo fgetc($myfile);
// 检查文件末尾
while(!feof($myfile)) {
echo fgets($myfile);
}
// 关闭文件
fclose($myfile);
12.2 文件打开模式
| 模式 |
说明 |
r |
只读,指针在文件开头 |
r+ |
读写,指针在文件开头 |
w |
只写,清空内容,指针在开头(文件不存在则创建) |
w+ |
读写,清空内容 |
a |
只写,追加到末尾(文件不存在则创建) |
a+ |
读写,追加到末尾 |
12.3 文件写入
$myfile = fopen("newfile.txt", "w") or die("无法打开文件!");
$txt = "Hello World!\n";
fwrite($myfile, $txt);
fclose($myfile);
12.4 文件复制、重命名、删除
copy("source.txt", "dest.txt"); // 复制
rename("old.txt", "new.txt"); // 重命名/移动
unlink("file.txt"); // 删除
12.5 文件判断
file_exists("test.txt"); // 文件是否存在
is_file("test.txt"); // 是否为文件
is_dir("test"); // 是否为目录
is_readable("test.txt"); // 是否可读
is_writable("test.txt"); // 是否可写
is_executable("test.txt"); // 是否可执行
12.6 文件属性
| 函数 |
说明 |
filesize($file) |
文件大小(字节) |
filectime($file) |
创建时间 |
filemtime($file) |
修改时间 |
fileatime($file) |
最后访问时间 |
12.7 目录操作
// 创建目录
mkdir("new_dir", 0755, true); // true为递归创建
// 删除目录(需为空)
rmdir("new_dir");
// 读取目录内容
$dir = opendir(".");
while (($file = readdir($dir)) !== false) {
echo $file . "\n";
}
closedir($dir);
12.8 递归遍历目录
function tree($dirfile) {
$dir = opendir($dirfile);
while (($file = readdir($dir)) !== false) {
if (is_dir("$dirfile/$file") && $file != "." && $file != "..") {
echo "目录: $dirfile/$file\n";
tree("$dirfile/$file"); // 递归
} else if ($file != "." && $file != "..") {
echo "文件: $dirfile/$file\n";
}
}
closedir($dir);
}
tree("./");
13. 命名空间
13.1 命名空间的作用
- 解决类/函数/常量名称冲突
- 为长名称创建别名,提高可读性
13.2 定义命名空间
// 定义命名空间(类似文件夹)
namespace MyProject;
class User {
// ...
}
// 子命名空间
namespace MyProject\SubSpace;
13.3 命名空间访问
// 1. 非限定名称(当前空间内)
new User();
// 2. 限定名称(相对路径)
new SubSpace\User();
// 3. 完全限定名称(绝对路径,用\开头)
new \MyProject\User();
13.4 导入命名空间(use)
// 导入类
use MyProject\User;
new User();
// 导入函数
use function MyProject\getUser;
// 导入常量
use const MyProject\VERSION;
// 起别名
use MyProject\User as U;
new U();
14. 正则表达式
14.1 元字符
| 元字符 |
说明 |
* |
0次或多次 |
+ |
1次或多次 |
? |
0次或1次 |
{m} |
恰好m次 |
{m,n} |
m到n次 |
{m,} |
至少m次 |
^ |
字符串开头 |
$ |
字符串结尾 |
| |
或(选择) |
[] |
字符类(匹配任意一个) |
[^] |
排除字符类 |
() |
分组(模式单元) |
. |
任意字符(除换行) |
\d |
数字(等价[0-9]) |
\D |
非数字 |
\w |
单词字符(字母数字下划线) |
\W |
非单词字符 |
\s |
空白字符 |
\S |
非空白字符 |
14.2 正则示例
// 匹配32位MD5
if (preg_match('/^[a-z0-9]{32}$/', $input)) {
echo "是MD5格式";
}
// 匹配邮箱
$pattern = '/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/';
// 匹配手机号
$pattern = '/^1[3-9]\d{9}$/';
// 匹配URL
$pattern = '/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/';
14.3 POSIX字符类
| 类 |
说明 |
[[:alnum:]] |
字母和数字 |
[[:alpha:]] |
字母 |
[[:digit:]] |
数字 |
[[:lower:]] |
小写字母 |
[[:upper:]] |
大写字母 |
[[:space:]] |
空白字符 |
[[:punct:]] |
标点符号 |
15. PHP与MySQL交互
15.1 连接方式选择
PHP 5及以上推荐使用:
- MySQLi(面向对象/面向过程)—— 仅支持MySQL
- PDO(PHP Data Objects)—— 支持12种数据库
15.2 MySQLi连接数据库
面向对象方式:
$servername = "localhost";
$username = "root";
$password = "123456";
$dbname = "myDB";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "连接成功";
// 关闭连接
$conn->close();
面向过程方式:
$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
die("连接失败: " . mysqli_connect_error());
}
mysqli_close($conn);
15.3 PDO连接数据库
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname;charset=utf8",
$username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "连接成功";
} catch(PDOException $e) {
echo "连接失败: " . $e->getMessage();
}
$conn = null;
15.4 创建表
$sql = "CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
)";
if ($conn->query($sql) === TRUE) {
echo "表创建成功";
} else {
echo "错误: " . $conn->error;
}
15.5 插入数据
// 单条插入
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')";
if ($conn->query($sql) === TRUE) {
echo "新记录插入成功,ID: " . $conn->insert_id;
}
// 多条插入(mysqli_multi_query)
$sql = "INSERT INTO MyGuests VALUES ('John', 'Doe', 'john@example.com');";
$sql .= "INSERT INTO MyGuests VALUES ('Mary', 'Moe', 'mary@example.com');";
if ($conn->multi_query($sql) === TRUE) {
echo "多条记录插入成功";
}
15.6 预处理语句(Prepared Statement)
预处理语句的两大优点:
- 减少解析时间
- 有效防止SQL注入(参数与SQL分离)
MySQLi预处理示例:
// 准备SQL模板(?为占位符)
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email)
VALUES (?, ?, ?)");
// 绑定参数("sss" = 三个字符串)
$stmt->bind_param("sss", $firstname, $lastname, $email);
// 执行
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();
$stmt->close();
参数类型说明:
| 类型 |
说明 |
i |
整型(integer) |
d |
双精度浮点(double) |
s |
字符串(string) |
b |
BLOB(二进制大对象) |
PDO预处理示例:
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email)
VALUES (:firstname, :lastname, :email)");
$stmt->bindParam(':firstname', $firstname);
$stmt->bindParam(':lastname', $lastname);
$stmt->bindParam(':email', $email);
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();
15.7 查询数据
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// 逐行获取
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"] . " - Name: " . $row["firstname"] .
" " . $row["lastname"] . "<br>";
}
} else {
echo "0 条结果";
}
获取方式:
| 方法 |
返回格式 |
fetch_assoc() |
关联数组(键名为字段名) |
fetch_row() |
索引数组(键名为数字索引) |
fetch_array() |
两者混合 |
fetch_object() |
对象 |
15.8 Where条件查询
$sql = "SELECT * FROM MyGuests WHERE firstname='Peter'";
$result = $conn->query($sql);
15.9 排序(ORDER BY)
$sql = "SELECT * FROM MyGuests ORDER BY reg_date DESC";
15.10 更新数据(UPDATE)
$sql = "UPDATE MyGuests SET lastname='Smith' WHERE id=1";
if ($conn->query($sql) === TRUE) {
echo "更新成功,受影响行数: " . $conn->affected_rows;
}
15.11 删除数据(DELETE)
$sql = "DELETE FROM MyGuests WHERE id=1";
if ($conn->query($sql) === TRUE) {
echo "删除成功,受影响行数: " . $conn->affected_rows;
}
16. 附录:常用函数速查
16.1 字符串函数
| 函数 |
说明 |
strlen($str) |
获取字符串长度 |
strpos($str, $needle) |
查找子串首次出现位置 |
strstr($str, $needle) |
查找子串首次出现并返回剩余 |
substr($str, $start, $len) |
截取字符串 |
str_replace($search, $replace, $str) |
替换 |
trim($str) |
去除首尾空白 |
strtolower($str) |
转小写 |
strtoupper($str) |
转大写 |
md5($str) |
MD5加密 |
sha1($str) |
SHA1加密 |
htmlspecialchars($str) |
转义HTML特殊字符 |
addslashes($str) |
转义引号(防SQL注入辅助) |
16.2 数组函数
| 函数 |
说明 |
count($arr) |
数组长度 |
array_merge($arr1, $arr2) |
合并数组 |
array_push($arr, $val) |
尾部添加 |
array_pop($arr) |
尾部弹出 |
array_shift($arr) |
头部移除 |
array_unshift($arr, $val) |
头部插入 |
in_array($val, $arr) |
检查是否存在 |
array_search($val, $arr) |
搜索并返回键名 |
array_unique($arr) |
去重 |
array_splice($arr, $start, $len) |
删除/替换部分元素 |
16.3 文件函数
| 函数 |
说明 |
fopen($file, $mode) |
打开文件 |
fclose($handle) |
关闭文件 |
fread($handle, $len) |
读取文件 |
fwrite($handle, $str) |
写入文件 |
fgets($handle) |
读取一行 |
fgetc($handle) |
读取一个字符 |
feof($handle) |
检查文件末尾 |
filesize($file) |
文件大小 |
file_exists($file) |
判断文件存在 |
注意本笔记是源于暗月安全培训 https://edu.moonsec.com 的ai整合版