|
楼主 |
发表于 2020-5-2 21:19:38
|
显示全部楼层
本帖最后由 only 于 2020-5-2 21:23 编辑
5月2日:
今天对之前学习的php MySQLi语法进行的复习,并作出了相关的总结
1.mysql的准备操作
- 连接数据库
- $mydb = mysqli_connect('localhost',用户名,密码,数据库名,3306(端口号));
- 连接成功返回1,失败返回0
- 连接判断
- mysqli_connect_errno(); 如果返回0则表示连接成功
- exit(mysqli_connect_error()); 返回一个字符串描述的错误代码信息,并退出
- 设置编码格式
- mysqli_set_charset($mydb, 'utf8');
- 在mysqli操作中将字符串里的特殊字符进行转义
- mysqli_real_escape_string($mydb,$str);
- 切换数据库操作
- mysqli_select_db($mydb,'要切换的数据库名');
- 关闭数据库连接
- mysqli_close($mydb);
复制代码
2.加密
3.一些常见sql语句
- 插入数据
- $sql="insert into 表(id,name) values (1,'小明'),(2,'小华')....";
- 更新数据
- $sql="update 表 set name='小花' where id=1"; //更改1个数据
- $sql="update 表 set id=2,name='小花' where id=1"; //更改2个
- 删除数据
- $sql="delete from 表 where id=1;
- 查询数据
- $sql="select * from 表 where id=1";
- 查询数量
- $sql="select count(*) from 表 where id=1";
- • max() 表示查询某个字段的最大值
- • min() 表示查询某个字段的最小值
- • avg() 表示查询某个字段的平均值
- • sum() 表示求出某个字段的总和
- 模糊查询
- $sql="select * from 表 where name like '%明%' and id>1";
- 多参数的查询
- $sql="select count(*) from tb_content where id in (1,2,3,4)";
- 关联表查询
- (1)$sql="select tb1.id,tb1.name,tb2.id,tb2.name
- from tb_table1 tb1,tb_table2 tb2
- where tb1.id=tb2.id";
- (2)$sql="select tb1.id,tb1.name,tb2.id,tb2.name from tb_table1 tb1
- INNER JOIN tb_table2 tb2
- ON tb1.id=tb2.id where tb1.id>1";
- //3张表以上
- $sql="select tb1.id,tb1.name,tb2.id,tb2.name from tb_table1 tb1
- INNER JOIN tb_table2 tb2 ON tb1.id=tb2.id
- INNER JOIN tb_table3 tb3 ON tb1.id=tb3.id";
- 注:tb1和tb2是给表起的别名
- ... INNER JOIN ... ON .. //.查询的结果是 2 张表或多张表中“同时满足”条件的数据
- ... LEFT JOIN ... ON ...//查询的结果是 2 张表“同时满足”条件的数据与左侧表中不符合条件的数据的结合
- ... RIGHT JOIN ... ON ...//查询的结果是 2 张表“同时满足”条件的数据与右侧表中不符合条件的数据的结合
- ... FULL JOIN ... ON ...//查询的结果是 2 张表“同时满足”条件的数据与左侧表和右侧表中不符合条件的数据的结合
- 排序
- $sql="select * from 表 order by id asc";//asc:升序排列,desc:降序排列
- 查询特定几条数据,分页相关
- //sql语句中 ,limit 0,3 表示从第0条数据开始取3条数据
- $sql="selet * from table limit 0,3";
- 向mysql数据库插入时间datetime类型
- $sql="insert into table values('2017-03-02 15:22:22')";
- //末尾秒,分,时,可以依次省略,但日,月,年不可以省略
- 获取当前时间
- (1)date_default_timezone_set("PRC"); //先设置时区,或者填Asia/chongqing
- $time=date("Y-m-d H-i-s", time());
- (2) $sql="insert into table values('id',now())";
- 注意:now()也可以获取当前的具体时间,但是只能在sql语句中使用
- (3) $sql="insert into table values('id',CURDATE())";
- 注:CURDATA()获取的是当前"年-月-日"时间,也是只能在sql语句中使用
复制代码 4.执行mysql语句
- $mydb= mysqli_connect('localhost','root','root','mysql',3306);
- mysqli_query($mydb,sql语句);
- 执行判断
- mysqli_errno($mydb); 如果返回0则表示执行成功
- exit(mysqli_error()); 返回一个字符串描述的错误代码信息,并退出
复制代码 5.获取查询结果
- $mydb= mysqli_connect('localhost','root','root','mysql',3306);
- $sql="select * from table";
- $result = mysqli_query($mydb,$sql);
- 循环输出全部数据
- while($data=mysqli_fetch_row($result)){
- var_dump($data);
- }
- (1)mysqli_fetch_row($result); 返回索引数组,返回一条数据
- (2)mysqli_fetch_assoc($result); 返回key-value关联数组,返回一条数据
- (3)mysqli_fetch_array($result); 返回索引和关联数组,返回一条数据
- (4)mysqli_fetch_all($result); 默认返回索引数组,返回全部数据
- mysqli_fetch_all($result, MYSQLI_ASSOC); 返回key-value关联数组
- (5)mysqli_num_rows(执行结果); 返回数据条数
复制代码 6.释放与结果相关的内存
- mysqli_free_result($result);
- 注:返回的结果集在数据量很大的时候需要很多的内存支持,所以在操作完结果集的时候有必要立即释放与一个结果集相关的内存
复制代码 7.判断执行是否成功
- mysqli_real_query($mydb, sql语句); 返回的是一个布尔值,成功为true
- 注:mysqli_query($mydb,$sql)返回的是一个结果集
复制代码 mysqli_real_query($mydb, sql语句); 返回的是一个布尔值,成功为true
注:mysqli_query($mydb,$sql)返回的是一个结果集
- $str=<<<STRING
- adasdasda''""""'''as;;'''dasdasd
- STRING;
- $str=mysqli_real_escape_string($mydb, $str); 将所有的特殊字符进行转义
- $sql = "insert into table(name) values('{$str}')";
- mysqli_query($mydb,$sql); 执行
复制代码 8.转义字符串
- $str=<<<STRING
- adasdasda''""""'''as;;'''dasdasd
- STRING;
- $str=mysqli_real_escape_string($mydb, $str); 将所有的特殊字符进行转义
- $sql = "insert into table(name) values('{$str}')";
- mysqli_query($mydb,$sql); 执行
复制代码 9.一次性执行多条sql语句
- $sql="insert into table(name) values("小明");insert into table(name) values("小花")";
- mysqli_multi_query($mydb,$sql); 只有第一条语句不出错,就返回true
复制代码 10.预处理语句机制
- (1)//准备sql语句里面使用占位符?
- $sql="insert into table(id,name) values(?,?)";
- //准备要执行的sql语句
- $stmt = mysqli_prepare($mydb, $sql);
- //为?绑定占位符
- mysqli_stmt_bind_param($stmt, 'is', $val1, $val2);
- i int,整数类型
- s str,字符串数据类型
- d double或float
- b 二进制数据类型
- //执行准备好的sql语句
- $val1 = 1;
- $val2 = "小明";
- mysqli_stmt_execute($stmt);
- //第二次执行准备好的sql语句
- $val1 = 2;
- $val2 = "小王";
- mysqli_stmt_execute($stmt);
- 。。。
- (2)如果是select之类的需要具体结果的语句
- $sql="select * from table where id<?";
- $stmt=mysqli_prepare($stmt,'i',$val1);
- $val1 = 4;
- if(mysqli_stmt_execute($stmt)){
- mysqli_stmt_bind_result($stmt,$id,$result);
- while(mysqli_stmt_fetch($stmt)){
- echo "{$id}->{$result} <br/>";
- }
- }
复制代码 11.其他
- 判断操作是否成功
- mysqli_affected_rows($mydb)==1 判断是否影响了1行
复制代码
|
|