# php_basic **Repository Path**: tcl7210-tao-chenglong/php_basic ## Basic Information - **Project Name**: php_basic - **Description**: No description available - **Primary Language**: PHP - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 5 - **Created**: 2021-05-25 - **Last Updated**: 2021-05-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PHP 先修课程 - c语言 - xhtml # PHP 环境配置 - phpstudy - appserv http://www.appservnetwork.com/index.php https://sourceforge.net/projects/appserv/ # PHP 文件所在目录 C:\phpStudy\PHPTutorial\WWW # phpMyAdmin 地址 http://localhost/phpMyAdmin/ # mysql front 管理 # php项目安装测试 Guest 升级到7.0 需要修改数据库操作函数 bisscuz https://files.gitee.com/group1/M00/10/B6/wKgCNF88AcmAMBn9ALlOagq0hgM044.zip?token=744853a93165e6b5b00405ca8f3f1b2d&ts=1608687690&attname=Discuz_X3.4_SC_UTF8%E3%80%9020200818%E3%80%91.zip&disposition=attachment ecshop # 开发工具 - Zend Studio - vscode # 测试例子 - hello - 网页表单 ``` error_reporting = E_ALL //换成 error_reporting = E_ALL & ~E_NOTICE // php中添加 ini_set("error_reporting","E_ALL & ~E_NOTICE"); ``` # php 手册 https://www.php.cn/xiazai/coll/1 # vscode 常用插件 PHP Constructor Debug Files Getters & Setters Intelephense Namespace Resolver Server phpfmt PHPDocument 要设置中文支持 phpcs 未使用 GBKtoUTF8 # PHP代码风格 demo.php # 注释 // /**/ /** */ doc_class doc_f doc_v 快捷键 # echo函数 - 输出一个或多个字符串 - 无返回值 # print函数 - 返回整形 # printf函数 - 可以放占位符 %d %f ... # sprintf函数 - Return a formatted string 生成格式化的字符串 - 返回字符串 sprintf ( string $format [, mixed $... ] ) : string # 标识符与变量 - 大小写敏感 - 弱类型 - 变量类型:整形 Integer 浮点 Float 双精度 Double 字符串 String 布尔 Boolean 数组 Array 对象 Object # 类型转换 - 隐式转换 - 强制转换 # getype setype 函数 # isset unset empty 函数 # is_int ...函数 # intval - 返回值是转换以后的值 与 settype区别 # 变量作用域 - global 在函数中访问全局变量用 global声明变量名 $GLOBALS 数组访问 - static 函数结束后仍保留在内存中 ## 超级全局变量 - $GLOBALS - $_SERVER - $_GET - $_POST - $_COOKIE - $_FILES - $_ENV - $_REQUEST - $_SESSION # 常量 - 定义后不能再修改 ``` define('VV',99); define('VV',499); echo VV; // 99 ``` # phpinfo函数 ``` echo $_SERVER['DOCUMENT_ROOT']; echo $_SERVER['REMOTE_ADDR'] ; echo $_SERVER['REMOTE_PORT'] ; echo $_SERVER['SERVER_SOFTWARE'] ; echo $_SERVER['SERVER_PROTOCOL']; echo $_SERVER['SERVER_NAME'] ; echo $_SERVER['SERVER_PORT']; echo $_SERVER['REQUEST_URI'] ; echo $_SERVER['REQUEST_METHOD']; echo $_SERVER['SCRIPT_NAME'] ; echo $_SERVER['PHP_SELF']; echo $_SERVER['HTTP_HOST']; echo $_SERVER['HTTP_CONNECTION']; echo $_SERVER['HTTP_CACHE_CONTROL']; echo $_SERVER['HTTP_UPGRADE_INSECURE_REQUESTS']; echo $_SERVER['HTTP_USER_AGENT'] ; echo $_SERVER['HTTP_SEC_FETCH_USER'] ; echo $_SERVER['HTTP_ACCEPT'] ; echo $_SERVER['HTTP_SEC_FETCH_SITE'] ; echo $_SERVER['HTTP_SEC_FETCH_MODE'] ; echo $_SERVER['HTTP_ACCEPT_ENCODING']; echo $_SERVER['HTTP_ACCEPT_LANGUAGE']; echo $_SERVER['REQUEST_TIME_FLOAT']; echo $_SERVER['REQUEST_TIME']; ``` # 访问表单变量 # 字符串连接 . 符合 # 字符串的插入 - "" 中可以放变量,转义字符 - '' 不能插变量 # 操作符 - == 比较值 === 比较值和类型 - if? 三元运算符 - 错误抑制运算符 @ ``` @(100/0); ``` # 控制语句 - if - switch break - while countinue - for # 数学函数 - +自动转换类型 - . 连接字符串 - is_numeric() 检测变量是否为数字或数字字符串 # 随机数 - rand()和mt_rand()函数 # 格式化数据 - number_format()函数 # 数学函数 - abs - floor - round - min - max # 数组 - 创建数组 -- $username = array('1','2'); -- $numbers = range(1,10); - print_r() 函数 - sizeof count 函数 - 循环访问数组 -- for -- foreach - is_array 函数 - 创建命名数组 - 追加数组元素 - $var6 = ['name'=>'zzz']; // 直接创建数组不用array - each() 把数组的每个元素拿出来,包装成4条数据 key 0 value 1 - each 的遍历 !! 保证数据为布尔类型 - list 函数 分离 each 取回的值 -- list 只认下标是数字的,所以each虽然有4个元素但只认识0 1下标的两个元素 -- reset 函数,重置 each的指针 -- array_unique array_flip 函数 # 二维数组 # 数组的排序 - sort 函数 ``` SORT_REGULAR - 正常比较单元(不改变类型) SORT_NUMERIC - 单元被作为数字来比较 SORT_STRING - 单元被作为字符串来比较 SORT_LOCALE_STRING - 根据当前的区域(locale)设置来把单元当作字符串比较,可以用 setlocale() 来改变。 SORT_NATURAL - 和 natsort() 类似对每个单元以"自然的顺序"对字符串进行排序。 PHP 5.4.0 中新增的。 SORT_FLAG_CASE - 能够与 SORT_STRING 或 SORT_NATURAL 合并(OR 位运算),不区分大小写排序字符串。 ``` - asort 函数 保持原始键值对关联 - ksort 函数 对数组按照键名排序 - rsort rasort rksort 反向排序 - shuffle 函数 - array_reverse 函数 - array_unshift 函数 前面插入元素 - array_push 函数 后面压入元素 - array_shift 函数 删除开头元素 - array_rand 函数 返回随机下标 -- 如果只取出一个,array_rand() 返回随机单元的键名。 否则就返回包含随机键名的数组。 完成后,就可以根据随机的键获取数组的随机值。 取出数量如果超过 array 的长度,就会导致 E_WARNING 错误,并返回 NULL。 - current 返回数组当前元素 - next 数组指针向后移动一个 - prev 数组指针向前移动一个 - array_count_values() 数组所有值出现的次数 - exact 将命名数组转换成标量变量 # 文件操作 ## 目录操作 - basename - dirname - pathinfo - realpath ## 磁盘、目录和文件计算 - filesize - disk_free_space - disk_total_space - fileatime - filectime - filemtime ## 文件处理 - 资源(resource):就是句柄 - fopen ``` r 只读 文件指针置于文件开头 r+ 读写 文件指针置于文件开头 w 只写 在写入前,删除文件内容,将指针返回到文件开头。如果文件不存在,则尝试创建。 w+ 读写 在读取或写入之前,删除文件内容,将指针返回到文件开头。如果文件不存在,则尝试创建。 a 只写 文件指针置于文件末尾。如果文件不存在,则尝试创建。此模式成为追加 (append)。 a+ 读写 文件指针置于文件末尾。如果文件不存在,则尝试创建。此过程称为追加到文件。 b 二进制 二进制模式----用于与其他模式进行连接。如果文件系统能够区分二进制文件和文本文件,你可能会使用它。Windows系统可以区分;而UNIX则不区分。推荐一直使用这个选项,以便获得最大程度的可移植性。二进制模式是默认的模式。 t 文本 用于与其他模式的结合。这个模式只是Windows系统下一个选项。它不是推荐选项,除非你曾经在代码中使用b选项。 ``` - fwrite fputs - file_put_contects() 不用句柄 - fclose - fgetc():读出一个字符,并将指针移到下一个字符。 - fgets():读出一行字符,可以指定一行显示的长度。 - fgetss():从文件指针中读取一行并过滤掉 HTML 标记。 - fread():读取定量的字符。 - fpassthru(): 输出文件指针处的所有剩余数据。 - file():将整个文件读入数组中,以行分组。 - readfile():读入一个文件并写入到输出缓冲。 - file_get_contents():将整个文件读入一个字符串。 - feof 判断读完文件函数 - file_exists 文件是否存在 - filesize() 查看一个文件的大小: - 删除一个文件:unlink(); - 在文件中定位:rewind()、fseek()和ftell(); - rewind()函数可以将文件指针复位到文件的开始。 - ftell()函数可以以字节为单位报告文件指针当前在文件中的位置。 - fseek()函数可以将文件指针fp从whence位置移动offset字节。 ## 文件锁定 - flock ``` LOCK_SH(以前为1) 读写锁定。这意味着文件可以共享,其他人可以读该文件 LOCK_EX(以前为2) 写操作锁定。这是互斥的。该文件不能被共享 LOCK_UN(以前为3) 释放已有的锁定 LOCK_NB(以前为4) 防止在请求加锁时发生阻塞 ``` ## 目录句柄操作 - opendir():打开路径指定的目录流。 - closedir():关闭目录流。 - readdir():返回目录中的各个元素。 # 自定义函数 ## 标准函数 - 内置函数 ## 自定义函数 - 默认参数的函数 ``` function functionArea($radius=10) { return $radius * $radius * pi(); } echo functionArea(); ``` - 多个值的函数 ``` function functionInfo($name,$age,$job) { $userInfo = array($name,$age,$job); //可以用追加的方式比较常用 /* $userInfo["name"]=$name; $userInfo["age"]=$age; $userInfo["job"]=$job; */ return $userInfo; } list($name,$age,$job) = functionInfo('sss',19,'学生'); echo $name.'今年'.$age.'岁了,目前还是个'.$job; ``` - 引用传参的函数调用 ``` // 引用传递可以在函数内对参数的修改在函数范围外也能反应 $prices = 50; $tax = 0.5; function functionPrices(&$prices,$tax) { $prices = $prices + ($prices * $tax); $tax = $tax * 2; } functionPrices($prices,$tax); echo $prices; echo '
'; echo $tax; ``` - 函数调用将不区分大小写,变量名是区分大小写 - 作用域 ``` 在函数内部声明的变量作用与是从声明它们的那条语句开始到函数末尾。这叫做函数作用域。这些变量成为局部变量。 在函数外部声明的变量作用域是从声明它们的那条语句开始到文件末尾,而不是函数内部。这叫做全局作用域。这些变量成为全局变量。 特殊的超级全局变量在函数内外部都是可见的。 使用require()和include()并不影响作用域。如果这两个语句用于函数内部,函数作用域适用。如果它不在函数内部,全局作用域适用。 关键字“global”可以用来手动指定一个在函数中定义或使用的变量具有全局作用域。 通过调用unset($variable_name)可以手动删除变量。如果变量被删除,它就不在参数所指定的作用域中了 ``` ## 文件包含 ``` 创建自己的函数库 通常将函数集文件存放在library文件夹里,然后通过文件调用即可。文件名约定促成可以取名为tool.library.php,tool可以根据情况来设定,后面两个照抄! ``` - include - include_once - require - require_once ``` 调用失败后,require()将给出一个致命错误,而include()只是给出一个警告 ``` ## 魔法常量 ``` __FILE__ 当前文件名 __LINE__ 当前行号 __FUNCTION__ 当前函数名 __CLASS__ 当前类名 __METHOD__ 当前方法名 ``` # 字符串处理 ## 字符串格式化 - chop()函数移除字符串后面多余的空白,包括新行。 - ltrim()函数移除字符串起始处多余空白。 - rtrim()函数移除字符串后面多余的空白,包括新行,此函数是chop()的别名。 - trim()函数移除字符串两边多余的空白。 - nl2br()函数将字符串作为输入参数,用XHTML中的
标记代替字符串中的换行符。 - echo htmlentities('我是fff!'); //转换所有字符 - echo htmlspecialchars('我是ggg!') //转换特殊字符 - echo strip_tags('我是hhh!') //去掉了 对于字符串来说,某些字符肯定是有效的,但是当将数据插入到数据库中的时候可能会引起一些问题,因为数据库会将这些字符解释成控制符。这些有问题的字符就是引号(单引号和双引)、反斜杠(\)和NULL字符。 PHP提供了两个专门用于转义字符串的函数。在将任何字符串写到数据库之前,应该使用addslashes()将它们重新格式化, 在调用了addslashes()后,所有的引号都加了斜杠,而stripslashes()函数去掉了这些斜杠。 - strtoupper() strtolower() ucfirst()函数将第一个字母转换为大写 ucwords()函数将每个单词第一个字母转换为大写 - str_pad()将字符串用指定个数的字符填充字符串。 ## 操作子字符串 - explode() 切割字符串 - implode()和join() 连接字符串 - strtok ``` "; $tok = strtok(",.#"); } ?> ``` - substr - str_split 返回一个数组,其中各数组元素分别是字符串参数中的一个字符串 - strrev 逆置字符串 ## 字符串比较 - strcmp() - strcasecmp() 不区分大小写 - strnatcmp() 自然排序 - strspn()函数返回一个字符串中包含有另一个字符串中字符的第一部分的长度 - strlen - substr_count()返回一个字符串在另一个字符串中出现的次数 ## 查找替换字符串 - strstr()、strchr()、strrchr()和stristr() - str_replace()、str_ireplace()、substr_replace ## 处理中文字符 # 中文字符可以是gbk,utf8,gb2312 # mb_strlen() 对应的函数为 strlen() 求字符串的长度 # mb_strstr() 对应的函数为 strstr() 求某字符串到结尾的字符 stristr 不区分字符大小 # mb_strpos() 对应的函数为 strpos() 求出字符最先出现处 # mb_substr() 对应的函数为 substr() 取出指定的字符串 # mb_substr_count() 对应函数为 substr_str() 返回字符串出现的次数 # 正则表达式 ## 正则表达式中包含三种元素分别为:量词、元字符、修饰符 ``` 量词 语法 描述 + 匹配任何至少包含一个前导字符串 * 匹配任何包含零个或多个前导字符串 ? 匹配任何包含零个或一个前导字符串 . 匹配任意字符串 {x} 匹配任何包含x个前导字符串 {x,y} 匹配任何包含x到y个前导字符串 {x,} 匹配任何包含至少x个前导字符串 $ 匹配字符串的行尾 ^ 匹配字符串的行首 | 匹配字符串的左边或者右边 () 包围一个字符分组或定义个反引用,可以使用\1\2提取 元字符 语法 描述 [a-z] 匹配任何包含小写字母a-z的字符串 [A-Z] 匹配任何包含大写字母A-Z的字符串 [0-9] 匹配任何包含数字0-9的字符串 [abc] 匹配任何包含小写字母a、b、c的字符串 [^abc] 匹配任何不包含小写字母a、b、c的字符串 [a-zA-Z0-9_] 匹配任何包含a-zA-Z0-9和下划线的字符串 \w 匹配任何包含a-zA-Z0-9和下划线的字符串(同上) \W 匹配任何没有下划线和字母数字的字符串 \d 匹配任何数字字符,和[0-9]相同 \D 匹配任何非数字字符,和[^0-9]相同 \s 匹配任何空白字符 \S 匹配任何非空白字符 \b 匹配是否到达了单词边界 \B 匹配是否没有达到单词边界 \ 匹配正则中的特殊字符 修饰符 语法 描述 i 完成不区分大小写的搜索 m 在匹配首内容或者尾内容时候采用多行识别匹配 x 忽略正则中的空白 A 强制从头开始匹配 U 禁止贪婪匹配 只跟踪到最近的一个匹配符并结束 ``` ## Perl风格函数 - preg_grep 搜索数组中的所有元素,返回由与某个模式匹配的所有元素组成的数组 - preg_match() 函数在字符串中搜索模式,如果存在则返回true,否则返回false - preg_match_all() 在字符串中匹配模式的所有出现,然后将所有匹配到的全部放入数组 - preg_auote() 每个对于正则表达式语法而言有特殊含义的字符前插入一个反斜线。这些特殊字符包含:$ ^ * () + = {} [] | \\ : <> - preg_replace() 搜索到所有匹配,然后替换成想要的字符串返回出来。 - preg_replace_callback() - preg_split() 分割不同的元素 # 日期与时间 - 时间戳是自 1970 年 1 月 1 日(00:00:00 GMT)以来的秒数 - checkdate 验证日期 - date() 根据预定义指令格式化时间和日期的字符串形式 - gettimeofday() 函数返回与当前时间有关的元素所组成的一个关联数组 - getdate 接受一个时间戳,并返回一个由其各部分组成的关联数组 - time()函数可以获取当前的时间戳 - mktime()函数可以生成给定日期时间的时间戳 - strtotime()将人可读的日期转换为Unix时间戳 - getlastmod()可以得到当前文件最后修改时间的时间戳 - 设置时区和GMT/UTC: -- 修改php.ini文件中的设置,找到[date]下的;date.timezone = 选项,将该项修改为date.timezone=Asia/Shanghai,然后重新启动apache服务器。 -- putenv()函数可以设置当前的默认时区 -- date_default_timezone_set()可以设置当前的默认时区。date_default_timezone_get()可以获取当前的默认时区。 - localtime()函数可以取得本地时间数据,然后返回一个数组 - microtime()函数,该函数返回当前UNIX时间戳和微秒数 # 表单与验证 - Header()函数 - HTML表单元素 ``` 表单元素 描述 text input 文本框 passoword input 密码框 hidden input 隐藏框 select 下拉列表框 checkbox 复选框 radio 单选按钮 textarea 区域框 file 上传 submit 提交按钮 reset 重置按钮 ``` - get post ``` 使用$_GET或$_POST来接收数据 1.$_GET['username'],发送的表单method必须是get; 2.$_POST['username'],发送的表单method必须是post; 3.采用isset()来验证$_GET['username']超级全局变量是否定义; 4.使用htmlspecialchars()函数将HTML特殊字符进行过滤。 对数据有效性进行验证 1.使用函数trim()去除数据的前后空格; 2.使用函数strlen()判断数据的长度; 3.使用函数is_numeric()判断数据是纯数字; 使用正则表达式验证邮箱是否合法。 ``` # 回话控制 ## Cookie的应用 - setcookie()函数可以在客户端生成一个cookie文件,这个文件可以保存到期时间、名称、值等 ```使用Cookie的限制 1、必须在HTML文件的内容输出之前设置; 2、不同的浏览器对Cookie的处理不一致,且有时会出现错误的结果。 3、限制是在客户端的。一个浏览器能创建的Cookie数量最多为30个,并且每个不能超过4KB,每个WEB站点能设置的Cookie总数不能超过20个。 ``` - cookie查看 ``` 安装Chrome的baiEidt this cookie 插件 地址栏前面的文档薄上点击,就会出现Chrome维护的所有的cookie 查看所有cookie 可以在Chrome浏览器中输入 :chrome://settings/打开设置,然后点击 显示高级选项 ``` ## Session会话处理 - 在使用session会话处理,必须开始session,使用session_start()开始会话。 # 上传文件 ## PHP上传配置 ``` 1.file_uploads=on|off : 确定服务器上的PHP脚本是否可以接受文件上传。 2.max_execution_time=integer :PHP脚本在注册一个致命错误之前可以执行的最长时间,以秒为单位。 3.memory_limit=integer : 设置脚本可以分配到的最大内存,以MB为单位。这可以防止失控的脚本独占服务器内存。 4.upload_max_filesize=integer :设置上传文件最大大小,以MB为单位。此指令必须小于post_max_size。 5.upload_tmp_dir=string :设置上传文件在处理之前必须存放在服务器的临时一个位置,直到文件移动到最终目的地为止。 post_max_size=integer :确定通过POST方法可以接受的信息的最大大小,以MB为单位。 ``` ## $_FILES数组 ## PHP上传函数 - is_uploaded_file - move_uploaded_file() # 处理图像 - 打开GD扩展 ## 创建图像 ``` 创建图像的一般流程: 1).设定标头,告诉浏览器你要生成的MIME类型。 2).创建一个图像区域,以后的操作都将基于此图像区域。 3).在空白图像区域绘制填充背景。 4).在背景上绘制图形轮廓输入文本。 5).输出最终图形。 6).清除所有资源。 7).其他页面调用图像。 设定标头指定MIME输出类型 创建一个空白的图像区域 在空白图像区域绘制填充背景 在背景上绘制图形轮廓输入文本 输出最终图形 清除所有资源 其他页面调用创建的图形 PHP创建的图片 ``` ## 简单小案例 # MySQL数据库 ## MySQL操作 - 显示当前数据库的版本号和日期。 SELECT VERSION(),CURRENT_DATE(); - 通过AS关键字设置字段名。 SELECT VERSION() AS version; //可设置中文,通过单引号 - 通过SELECT 执行返回计算结果 SELECT (20+5)*4; - 通过多行实现数据库的使用者和日期 >SELECT >USER() >, >NOW() >; - 通过一行显示数据库使用者和日期 >SELECT USER();SELECT NOW(); - 命令的取消 >\c - MySQL窗口的退出 >exit; ## MySQL常用数据类型 - 整数型:TINYINT,SMALLINT,INT,BIGINT - 浮点型:FLOAT,DOUBLE,DECIMAL(M,D) - 字符型:CHAR,VARCHAR - 日期型:DATETIME,DATE,TIMESTAMP - 备注型:TINYTEXT,TEXT,LONGTEXT 日期型 ``` 列类型 “零”值 DATETIME '0000-00-00 00:00:00' DATE '0000-00-00' TIMESTAMP 00000000000000 TIME '00:00:00' YEAR 0000 ``` 字符串型 ``` 值 CHAR(4) 存储需求 VARCHAR(4) 存储需求 '' ' ' 4个字节 '' 1个字节 'ab' 'ab ' 4个字节 'ab ' 3个字节 'abcd' 'abcd' 4个字节 'abcd' 5个字节 'abcdefgh' 'abcd' 4个字节 'abcd' 5个字节 ``` 整数型 ``` 类型 字节 最小值 最大值 (带符号的/无符号的) (带符号的/无符号的) TINYINT 1 -128 127 0 255 SMALLINT 2 -32768 32767 0 65535 MEDIUMINT 3 -8388608 8388607 0 16777215 INT 4 -2147483648 2147483647 0 4294967295 BIGINT 8 -9223372036854775808 9223372036854775807 0 18446744073709551615 ``` 浮点型 ``` 类型 字节 最小值 最大值 FLOAT 4 +-1.175494351E-38 +-3.402823466E+38  DOUBLE 8 +-2.2250738585072014E-308 +-1.7976931348623157E+308  DECIMAL 可变 它的取值范围可变。  ``` 备注型 ``` 类型 描述 TINYTEXT 字符串,最大长度255个字符 TEXT 字符串,最大长度65535个字符 MEDIUMTEXT 字符串,最大长度16777215个字符 LONGTEXT 字符串,最大长度4294967295个字符 ``` ## MySQL数据库操作 - 显示当前存在的数据库 >SHOW DATABASES; - 选择你所需要的数据库 >USE guest; - 查看当前所选择的数据库 >SELECT DATABASE(); - 查看一张表的所有内容 >SELECT * FROM guest; //可以先通过SHOW TABLES;来查看有多少张表 - 根据数据库设置中文编码 >SET NAMES gbk; //set names utf8; - 创建一个数据库 >CREATE DATABASE book; - 在数据库里创建一张表 >CREATE TABLE users ( >username VARCHAR(20), //NOT NULL 设置不允许为空 >sex CHAR(1), >birth DATETIME); - 显示表的结构 >DESCIRBE users; - 给表插入一条数据 >INSERT INTO users (username,sex,birth) VALUES ('lpz','x',NOW()); - 筛选指定的数据 > SELECT * FROM users WHERE username = 'lpz'; - 修改指定的数据 >UPDATE users SET sex = '男' WHERE username='lpz'; - 删除指定的数据 > DELETE FROM users WHERE username='lpz'; - 按指定的数据排序 > SELECT * FROM users ORDER BY birth DESC; //正序 - 删除指定的表 >DROP TABLE users; - 删除指定的数据库 >DROP DATABASE book; ## MySQL常用函数 - 文本函数 ``` 函数 用法 描述 CONCAT() CONCAT(x,y,...) 创建形如xy的新字符串 LENGTH() LENGTH(column) 返回列中储存的值的长度 LEFT() LEFT(column,x) 从列的值中返回最左边的x个字符 RIGHT() RIGHT(column,x) 从列的值中返回最右边的x个字符 TRIM() TRIM(column) 从存储的值删除开头和结尾的空格 UPPER() UPPER(column) 把存储的字符串全部大写 LOWER() LOWER(column) 把存储的字符串全部小写 SUBSTRING() SUBSTRING(column, start, length) 从column中返回开始start的length个字符(索引从0开始) MD5() MD5(column) 把储存的字符串用MD5加密 SHA() SHA(column) 把存储的字符串用SHA加密 数字函数 函数 用法 描述 ABS() ABS(x) 返回x的绝对值 CEILING() CEILING(x) 返回x的值的最大整数 FLOOR() FLOOR(x) 返回x的整数 ROUND() ROUND(x) 返回x的四舍五入整数 MOD() MOD(x) 返回x的余数 RNAD() RNAD() 返回0-1.0之间随机数 FORMAT() FORMAT(x,y) 返回一个格式化后的小数 SIGN() SIGN(x) 返回一个值,正数(+1),0,负数(-1) SQRT() SQRT(x) 返回x的平方根 ``` - 日期和时间函数 ``` 函数 用法 描述 HOUR() HOUR(column) 只返回储存日期的小时值 MINUTE() MINUTE(column) 只返回储存日期的分钟值 SECOND() SECOND(column) 只返回储存日期的秒值 DAYNAME() DAYNAME(column) 返回日期值中天的名称 DAYOFMONTH() DAYOFMONTH(column) 返回日期值中当月第几天 MONTHNAME() MONTHNAME(column) 返回日期值中月份的名称 MONTH() MONTH(column) 返回日期值中月份的数字值 YEAR() YEAR(column) 返回日期值中年份的数字值 CURDATE() CURDATE() 返回当前日期 CURTIME() CURTIME() 返回当前时间 NOW() NOW() 返回当前时间和日期 ``` - 格式化日期和时间(DATE_FORMAT()和TIME_FORMAT()) ``` 名词 用法 示例 %e 一月中的某天 1~31 %d 一月中的某天,两位 01~31 %D 带后缀的天 1st~31st %W 周日名称 Sunday~Saturday %a 简写的周日名称 Sun-Sat %c 月份编号 1~12 %m 月份编号,两位 01~12 %M 月份名称 January~December %b 简写的月份名称 Jan~Dec %Y 年份 2002 %y 年份,两位 02 %l 小时 1~12 %h 小时,两位 01~12 %k 小时,24小时制 0~23 %H 小时,24小制度,两位 00~23 %i 分钟 00~59 %S 秒 00~59 %r 时间 8:17:02 PM %T 时间,24小时制 20:17:02 PM %p 上午或下午 AM或PM ``` ## SQL语句详解 - 创建一个班级数据库school,里面包含一张班级表grade,包含编号(id)、姓名(name)、邮件(email)、评分(point)、注册日期(regdate)。 ``` mysql>CREATE DATABASE school; //创建一个数据库 mysql> CREATE TABLE grade ( //UNSIGNED表示无符号,TINYINT(2) 无符号整数0-99,NOT NULL表示不能为空,AUTO_INCREMENT表示从1开始没增加一个字段,累计一位 -> id TINYINT(2) UNSIGNED NOT NULL AUTO_INCREMENT, -> name VARCHAR(20) NOT NULL, -> email VARCHAR(40), -> point TINYINT(3) UNSIGNED NOT NULL, -> regdate DATETIME NOT NULL, -> PRIMARY KEY (id) //表示id为主键,让id值唯一,不得重复。 -> ); ``` - 给这个班级表 grade新增5-10条学员记录 ``` mysql> INSERT INTO grade (name,email,point,regdate) VALUES ('lpz','lpz2.com@qq.com',95,NOW()); ``` - 查看班级所有字段的记录,查看班级id,name,email的记录 ``` mysql> SELECT * FROM grade; mysql> SELECT id,name,email FROM grade; ``` - 姓名等于'lpz'的学员,成绩大于90分的学员,邮件不为空的成员,70-90之间的成员 ``` mysql> SELECT * FROM grade WHERE name='lpz'; mysql> SELECT * FROM grade WHERE point>90; mysql> SELECT * FROM grade WHERE email IS NOT NULL; mysql> SELECT * FROM grade WHERE point BETWEEN 70 AND 90; mysql> SELECT * FROM grade WHERE point IN (95,82,78); ``` - 查找邮件使用163的学员,不包含qq.com字符串的学员 ``` mysql> SELECT * FROM grade WHERE email LIKE '%163.com'; mysql> SELECT * FROM grade WHERE email NOT LIKE '%qq.com%'; ``` - 按照学员注册日期的倒序排序,按照分数的正序排序 ``` mysql> SELECT * FROM grade ORDER BY regdate DESC; mysql> SELECT * FROM grade ORDER BY point ASC; ``` - 只显示前三条学员的数据,从第3条数据开始显示2条 ``` mysql> SELECT * FROM grade LIMIT 3; mysql> SELECT * FROM grade LIMIT 2,2; ``` - 修改姓名为'lpz'的电子邮件 ``` mysql> UPDATE grade SET email='qq.com@163.com' WHERE name='lpz'; ``` - 删除编号为4的学员数据 ``` mysql> DELETE FROM grade WHERE id=4; ``` - WHERE表达式的常用运算符 ``` MYSQL运算符 含义 = 等于 < 小于 > 大于 <= 小于或等于 >= 大于或等于 != 不等于 IS NOT NULL 具有一个值 IS NULL 没有值 BETWEEN 在范围内 NOT BETWEEN 不在范围内 IN 指定的范围 OR 两个条件语句之一为真 AND 两个条件语句都为真 NOT 条件语句不为真 ``` ## PHP操作MySQL - PHP连接到MySQL - 增删改查 - 其他常用函数 ``` mysql_fetch_row():从结果集中取得一行作为枚举数组 mysql_fetch_assoc(): 从结果集中取得一行作为关联数组 mysql_fetch_array(): 从结果集中取得一行作为关联数组,或数字数组,或二者兼有 mysql_fetch_lengths(): 取得结果集中每个输出的长度 mysql_field_name(): 取得结果中指定字段的字段名 mysql_num_rows(): 取得结果集中行的数目 mysql_num_fields():取得结果集中字段的数目 mysql_get_client_info(): 取得 MySQL 客户端信息 mysql_get_host_info(): 取得 MySQL 主机信息 mysql_get_proto_info(): 取得 MySQL 协议信息 mysql_get_server_info(): 取得 MySQL 服务器信息 ```