PHP
php注释的应用
注释即代码的解释和说明,注释部分会被解释器忽略不计
<?php /* 多行文本注释 */ ?> <?php //单行文本注释 ?>
php程序初体验
每一行php代码的结尾必须加上英文的分号
打印输出 只能输出 字符 数值 字符串是用引号(英文的单引号 和双引号 )包裹起来的内容
<?php header("content-type:text/html;charset=utf-8");//设置页面编码为utf-8 echo "hello world"; //输出文本内容hello world echo 123; //输出数字123 echo "<br>"; //强制换行 echo "<h1>标题</h1>"; //输出标题 echo "<hr>"; //输出横线 ?>
变量
变量就是一个数据容器 你把什么样的数据放入到容器中 那么这个容器就是哪个数据
变量的声明和初始化
以 $ 开头(坊间戏言,PHP 程序员是有多穷,才要求变量名以货币符号开头);
$变量名 = 变量值
变量的命名规则和规范: 1.变量名最好是使用数字字母和下划线来构成 2.数字不能开头 3.尽量不要使用中文 4.严格区分大小写
<?php header("content-type:text/html;charset=utf-8");//设置页面编码为utf-8 $name="张三"; echo $name; echo "<hr>"; $姓名 = ”李四"; echo $姓名; echo "<hr>"; $a = 123; $A = 456; echo $a; echo "<br>"; echo $A; echo "<hr>"; $text = "文章内容文章内容文章内容文章内容文章内容文章内文章内容文章内容文章内容文章内容文章内容文章内容文章内容"; echo $text; echo "<hr>"; $content = "王五"; echo $content; echo $content; echo $content; $content = "赵四"; echo $content;
常量
常量可以理解为值不变的量,常量值被定义后,在脚本的其他地方都不可以更改
常量名不需要 $ 前缀(也不能设置),并且为了和变量做区分,通常都是以大写字母进行命名(同样大小写敏感),此外,常量名的命名规则除了不需要 $ 前缀之外,其他和变量名一样,只支持字母、数字、下划线,并且不能以数字开头。
通过define函数来定义常量
<?php define("LANGUAGE","PHP"); define("SCHOOL","光明小学"); echo LANGUAGE; echo SCHOOL;
数据类型
php支持8种数据类型:
4种标量类型:boolean(布尔型)、integer(整型)、float/double(浮点型)、string(字符串型)
2种复合类型:array(数组)、object(对象)
2种特殊类型:resource(资源)、null
类型 | 说明 |
boolean(布尔型) | 这是最简单的类型。只有两个值,真(true)、假(false) |
integer(整型) | 整型数据类型只能包含整数。这些数据类型可以是正数或负数 |
float/double(浮点型) | 浮点数据类型用于存储数字,和整型不同的是它有小数位 |
string(字符串型) | 字符串就是连续的字符序列,可以是计算机所能表示的一切字符的集合 |
在 PHP 中,字符串可以通过单引号或者双引号定义,用字符串类型的变量表示【mysql高级】这门课
$course = "mysql高级"; echo $course;
字符串类型判断
要判断变量数据类型是否是字符串,可以借助 is_string 函数:
1. if (is_string($course)) { 2. echo '$course 是字符串'; 3. } 4. exit;
我们这里使用了 if 语句对变量是否是字符串类型进行判断(关于 if 语句后面会介绍),最后通过 exit手动退出程序。
单引号与双引号的区别
通过上述代码还可以看到单引号字符串中引用变量不会对变量值进行解析,如果是双引号,则会对引用变量值进行解析:
if (is_string($course)) { echo "\"$course\" 是字符串"; } if (is_string($course)) { echo "'$course' 也是字符串"; }
此外,由于我们在双引号字符串中引入了双引号,所以需要通过转义符 \ 对其进行转转义才能正常输出,双引号字符串中引用单引号则不需要转义;
由于双引号字符串会尝试对其中包含的 PHP 变量进行值解析,所以性能比单引号字符串差一些,因此日常可以用单引号字符串的地方,尽量用单引号字符串,除非某些场景必须使用双引号字符串,比如像上面那样包含转义字符(以 \ 开头的字符,比如 \n`、`\"`、`\t` 等)或者包含单引号,单引号字符串不支持转义字符(`\'除外),这一点需要注意。
当然,对于单引号字符串也可以实现类似上面双引号字符串的功能,只是编写起代码来更麻烦一些,可读性更差一些
if (is_string($course)) { echo '\"$course\" 是字符串'; }
字符串:使用引号引起来的内容都是字符串
var_dump() 是一个函数 可以在打印数据的同时 输出数据的类型
1. $a = '123'; 2. var_dump($a);
数组
数组分为索引数组和关联数组
索引数组
所谓索引数组指的是数组的键为隐式数字,并且会自动维护,就像静态语言的数组一样。
php索引数组的索引值和其他语言一样,都是从0开始。
$courses = array('php','html','mysql'); print_r($courses); $nums = [1,2,4,5]; print_r($nums);
除了像上述代码那样通过指定初始值进行数组初始化,还可以初始化一个空数组,在 PHP 中,初始化空数组时不必指定数组大小,也不必指定数据类型:
$fruits = [];
然后我们可以依次往数组中追加元素:
$fruits[] = 'Apple'; $fruits[] = 'Orange'; $fruits[] = 'banana';
我们可以通过 count
函数获取数组长度。
$len = count($fruits);
如果要获取指定索引对应的元素值,可以通过如下这种方式:
$fruit = $fruits[0];
要更新指定索引位置对应的元素值,可以通过如下方式:
$fruits[2] = 'Banana';
要删除指定索引位置对应的元素值,可以通过 unset
函数:
unset($fruits[1]);
关联数组
与索引数组不同,关联数组通常需要显式指定数组元素的键
$student = [ 'name'=>'张三', 'age' => 14, 'sex' => '男' ] $student = array( 'name'=>'张三', 'age' => 14, 'sex' => '男' )
此时的键就不再是连续数字,而是初始化时设置的键名了
$student = [];
然后通过指定键值对来新增元素
$student['name'] = '李四'; $student['age'] = 18; $student['sex'] = '男';
要获取某个元素值,比索引数组更加方便,因为可以直接通过可读性更强的键名来获取对应元素值:
$name = $student['name'];
要更新某个元素值,也可以通过指定键名来修改:
$student['age'] = 19;
要删除某个数组元素值,依然可以通过 unset
函数:
unset($student['sex']);
运算符
算术运算符
算术运算符包含加(+)、减(-)、乘(*)、除(/)、求余(%)
$a=10; $b=2; echo $a+$b; echo '<br>'; echo $a-$b; echo '<br>'; echo $a*$b; echo '<br>'; echo $a/$b; echo '<br>'; echo $a%$b; echo $b%$a;
比较运算符
所以比较运算符指的是对变量值大小进行比较,通常也是数值间的比较。
比较运算符包括:大于(>)、小于(<)、小于等于(<=)、大于(>=)、等于(==)、不等(!=)、恒等(===)、非恒等(!==)
恒等于不只是数值上相等,而且两者的类型也一样
非恒等说明数值不等或者类型不等
自增/自减运算符
// $a=1; // echo ++$a 是先加1再输出 // echo $a++ 是先输出$a原来的值,再加1 // echo $a; // $a = $a+3 等价于 $a+=3 // ++$a 等价于$a+=1 $a=1; echo ++$a; echo $a; echo $a++; echo $a; echo $a+=3; echo $a; // echo --$b 是先减1再输出 // echo $b-- 是先输出$b原来的值,再减1 // $b = $b-3 等价于 $b-=3 // --$b 等价于$b-=1 $b = 10; echo --$b; echo $b; echo $b--; echo $b; echo $b-=3; echo $b;
逻辑运算符
所谓逻辑运算就是与(AND或&&)、或(OR或者||)、非(NOT或!)、异或(XOR)运算,这些也是和高中数学课本中介绍的逻辑运算是一个概念
异或:当值为一真一假时返回真
控制结构
单分支结构
所谓单分支就是指存在一个条件判断和选择:
1. $score = 80; 2. if($score>=80 && $score<=90){ 3. echo '优秀'; 4. }
双分支结构
为了处理 if 条件未命中的情况,我们可以引入一个 else 语句处理其他业务逻辑,这种满足 if 条件执行对应业务逻辑,不满足 if 条件,执行 else 设定业务逻辑的代码模式,称之为双分支结构:
$score = 70; if($score>=80 && $score<=90){ echo '优秀'; }else{ echo '合格'; }
多分支结构
这种处理方式虽然可以获取一些明确的信息了,比如成绩数据,但是等级信息不明朗,只是一个粗略的「其他等级」,要在 if 条件不成立的情况下获取明确的等级信息,就需要引入多个 else if 语句增加更多的其他条件判断,最后以一个 else 语句作为兜底(默认分支),这种代码选择结构模式称之为多分支结构:
$score = 60; if ($score >= 90) { echo '优秀'; } else if ($score >= 80 && $score < 90) { echo '良好'; } else if ($score >= 60 && $score < 80) { echo '合格'; } else if ($score < 60) { echo '差'; } else { echo '没有成绩'; } $score = 60; if ($score >= 90) { echo '优秀'; } else if ($score >= 80) { echo '良好'; } else if ($score >= 60) { echo '合格'; } else if ($score < 60) { echo '差'; } else { echo '没有成绩'; }
循环结构
所谓循环结构指的是当符合循环条件时,则循环执行循环体中的代码:
循环结构的实现一般有 while、do...while、for 循环三种,最终实现的功能一致,只是三者在循环条件的设置上各自不同罢了。
while
要通过 while 循环打印成绩信息,可以这样编写实现代码:
$score = [70,90,60,76]; $num = count($score); $i=1; while($i<=$num){ echo "第 $i 个学生的成绩信息:"; echo $score[$i-1]; echo "<br>"; $i++; }
在这段代码中,首先获取数据总量 $num
,然后设置一个迭代变量 $i
,每次打印一个学生信息后将迭代变量 +1,直到迭代变量的值超过数据总量,则循环结束。
do...while
还可以通过 do...while 循环编写上述代码:
$score = [70,90,60,76]; $num = count($score); $i=1; do{ echo "第 $i 个学生的成绩信息:"; echo $score[$i-1]; echo "<br>"; $i++; }while($i<=$num);
打印结果和 while 循环一致,由于 do...while 循环条件设置在 do 语句块之后,所以存在不管循环条件是否满足,始终执行一次循环体的情况,因此在日常编码中,并不常见。
for
最常见的当属 for 循环了,这种循环语句足够灵活,可读性也更好,我们先通过 for 循环重构上述循环代码
$score = [70,90,60,76]; $num = count($score); for($i=1;$i<=$num;$i++){ echo "第 $i 个学生的成绩信息:"; echo $score[$i-1]; echo "<br>"; }
foreach
在 PHP 中,对于数组循环遍历,尤其是关联数组遍历,还提供了另一个更加强大简单的语言结构 —— foreach
,通过 foreach
语句,可以更方便地获取键值信息
$score = [70,90,60,76]; foreach($score as $key=>$val){ echo "第 $key 个学生的成绩信息:"; echo $val; echo "<br>"; }
其中 $data
表示待遍历的数组(或者实现 ArrayAccess
接口的类),$key
表示数组的键,$val
表示对应的键值,无需设置迭代变量、循环终止条件,遍历完成后,会自动退出循环
$student = [ 'name'=>'张三', 'age' => 14, 'sex' => '男' ]; foreach($student as $val){ echo $val; echo "\n"; } $student = [ 'name'=>'张三', 'age' => 14, 'sex' => '男' ]; foreach($student as $key=>$val){ echo "$key\n:\n$val"; echo '<br>'; }
php mysql数据库操作
连接数据库
mysql_connect('数据库服务器','登录数据库服务器的账号','登录数据库服务器的密码’)
// 数据库服务器:localhost 或 127.0.0.1
// 登录数据库服务器的账号:root
//登录数据库服务器的账号:root
选择数据库
mysql_select_db() 函数设置活动的 MySQL 数据库。
如果成功,则该函数返回 true。如果失败,则返回 false。
mysql_select_db(数据库名称,数据库连接)
执行Sql
mysql_query() 函数执行一条 MySQL 查询。
如果没有打开的连接,本函数会尝试无参数调用 mysql_connect() 函数来建立一个连接并使用之。
mysql_query() 仅对 SELECT,SHOW,EXPLAIN 或 DESCRIBE 语句返回一个资源标识符,如果查询执行不正确则返回 FALSE。
对于其它类型的 SQL 语句,mysql_query() 在执行成功时返回 TRUE,出错时返回 FALSE。
非 FALSE 的返回值意味着查询是合法的并能够被服务器执行。这并不说明任何有关影响到的或返回的行数。很有可能一条查询执行成功了但并未影响到或并未返回任何行。
mysql_query(sql语句,数据库连接);
mysql_fetch_array() 函数
mysql_fetch_array() 函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有
MYSQL_ASSOC - 关联数组 MYSQL_NUM - 数字数组 MYSQL_BOTH - 默认。同时产生关联和数字数组
返回根据从结果集取得的行生成的数组,如果没有更多行则返回 false。
header("Content-Type:text/html;charset=utf-8");
#连接数据库
$conn=@mysql_connect('localhost','root','root') or die('连接数据库失败~');
#选择数据库
mysql_select_db('db_school') or die('选择数据库失败~');
#设置中文的字符集
mysql_query('set names "utf8"'); $sql = "SELECT * from tb_student"; $result = mysql_query($sql,$conn); print_r(mysql_fetch_array($result)); //print_r(mysql_fetch_array($result,MYSQL_ASSOC )); //print_r(mysql_fetch_array($result,MYSQL_NUM )); mysql_close($conn); //关闭数据库连接
mysql_fetch_array(查询结果集,MYSQL_NUM) 等价于 mysql_fetch_row(查询结果集) 返回结果为数字数组
mysql_fetch_array(查询结果集,MYSQL_ASSOC) 等价于 mysql_fetch_assoc(查询结果集) 返回结果为关联数组
mysql_num_rows() 函数
获取查询到的数据条数
mysql_affected_rows() 函数
mysql_affected_rows() 函数返回前一次 MySQL 操作所影响的记录行数。
取得最近一次与 link_identifier 关联的 INSERT,UPDATE 或 DELETE 查询所影响的记录行数。
执行成功,则返回受影响的行的数目,如果最近一次查询失败的话,函数返回 -1。
如果最近一次操作是没有任何条件(WHERE)的 DELETE 查询,在表中所有的记录都会被删除,但本函数返回值在 4.1.2 版之前都为 0。
当使用 UPDATE 查询,MySQL 不会将原值与新值一样的列更新。这样使得 mysql_affected_rows() 函数返回值不一定就是查询条件所符合的记录数,只有真正被修改的记录数才会被返回。
REPLACE 语句首先删除具有相同主键的记录,然后插入一个新记录。该函数返回的是被删除的记录数加上被插入的记录数。
$sql = 'delete from tb_student whre studentno=1'; mysql_query($sql,$conn); $num = mysql_affected_rows(); echo $num; mysql_close($con);