忘川书阁 / PHP学习 / mysql 高级课程笔记

分享

   

mysql 高级课程笔记

2018-04-12  忘川书阁

1.mysql 表关联(框架做准备)(重点)
(1)原生态表关联(过程化)
 <1>两表
    select c.id as cid,c.name as cname,b.id as bid,b.name as bname from class as c,brand as b where c.id=b.class_id;
<2>三表
    select c.id as cid,c.name as cname,b.id as bid,b.name as bname from class as c,brand as b where c.id=b.class_id;
(2)表关联2 (框架做准备)
<1>两表
a.内连接  inner join  获取的是多个表的交集数据
    sql:select c.id as cid,c.name as cname,b.id as bid,b.name as bname from class as c inner join brand as b on c.id=b.class_id;
 b.左连接  left join  以最左边的表为主,做表关联,查询的数据不仅是交集数据,还有最左边表的没有关联的数据
    sql:select c.id as cid,c.name as cname,b.id as bid,b.name as bname from class as c left join brand as b on c.id=b.class_id;
c.右连接  right join  以最右边的表为主,做表关联,查询的数据不仅是交集数据,还有最右边表的没有关联的数据
    sql:select c.id as cid,c.name as cname,b.id as bid,b.name as bname from class as c right join brand as b on c.id=b.class_id;
<2>三表
a.内连接
    select * from class as c inner join  brand as b on c.id=b.class_id inner join shop as s on b.id=s.brand_id;
b.左连接
    select * from class as c left join  brand as b on c.id=b.class_id left join shop as s on b.id=s.brand_id;
c.右连接
    select * from class as c right join  brand as b on c.id=b.class_id right join shop as s on b.id=s.brand_id;
2.聚合函数(框架做准备)(重点)
  count:统计行数
  select count(*) from  stu;
  sum:返回列中值的和,会自动跳过null值
  select sum(age) from  stu;
  avg:返回结果集中的所有值的平均值
  select avg(age) from  stu;
  max/min:返回所有值中的最大/小值
  Group by :数据分组查询
  select classid,max(age) from  stu group by classid;
  having:在分组后再次对数据进行过滤
  select *,max(age) from stu group by classid having sex='w';
3.pdo(重点)
(1)pdo定义:
  pdo:其实就是操作数据库的方法,把操作数据库的方法封装在一个类里
(2)原因:
    <1>跨数据库管理
    <2>预处理(防止sql语句注入)
       预处理:就是把sql语句预先加载过来,只需要查询一次就可以把所有的结果获取到,提高sql语句的执行效率,减少sql语句的分析时间
  防止sql语句注入:
       a.问号式
try {
         //用pdo连接数据库
         $pdo=new PDO("mysql:host=localhost;dbname=o2o_15","root","123");
         //设置错误模式
         $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
         //设置字符集
         $pdo->exec("set names utf8");
     } catch (PDOException $e) {
         echo "数据库连接失败,原因是:".$e->getMessage()."<br>";
         echo "数据库连接失败,发生错误的行数是:".$e->getLine()."<br>";
         echo "数据库连接失败,发生错误的文件是:".$e->getFile()."<br>";
         exit;
     }
     //准备sql
     $sql="insert into stu values(null,?,?,?,?)";
    // 返回预处理
     sql语句和参数或者值得分离
     不需要发送整个sql语句 只需要 发送参数或者值即可
     在发送参数或者值得时候 采用的是不同的协议 保证数据安全(了解)
     提高sql语句的执行效率,减少sql语句的分析时间
     $list=$pdo->prepare($sql);
    //(1)绑定参数
     $list->bindParam(1,$name);
     $list->bindParam(2,$age);
     $list->bindParam(3,$classid);
     $list->bindParam(4,$sex);
     //给参数赋值
     $name="junge1";
     $age=16;
     $classid="19";
     $sex='m';
     //(2)绑定值
         $list->bindValue(1,"junge2");
         $list->bindValue(2,16);
         $list->bindValue(3,"19");
         $list->bindValue(4,"m");
     //(3)绑定数组
         $data=array("junge3",16,"19","m");


       b.别名式
$sql="insert into stu values(null,:name,:age,:classid,:sex)";
     //返回预处理
     $list=$pdo->prepare($sql);
     //(1)绑定参数
        $list->bindParam('name',$name);
        $list->bindParam('age',$age);
        $list->bindParam('classid',$classid);
        $list->bindParam('sex',$sex);
      //给参数赋值
        $name="junge4";
        $age=16;
        $classid="19";
        $sex='m';
     //(2)绑定值
        $list->bindValue("name","junge5");
        $list->bindValue("age",16);
        $list->bindValue("classid","o2o19");
        $list->bindValue("sex","m");
     //(3)绑定数组
         $arr=array("name"=>"junge6","age"=>16,"classid"=>"o2o19","sex"=>'m');

    <3>支持事务操作
4.pdo 预处理(重点)
    预处理:就是把sql语句预先加载过来,只需要查询一次就可以把所有的结果获取到,提高sql语句的执行效率,减少sql语句的分析时间。
<?php
    try {
         //用pdo连接数据库
         $pdo=new PDO("mysql:host=localhost;dbname=o2o_15","root","123");
         //设置错误模式
         $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
         //设置字符集
         $pdo->exec("set names utf8");
     } catch (PDOException $e) {
         echo "数据库连接失败,原因是:".$e->getMessage()."<br>";
         echo "数据库连接失败,发生错误的行数是:".$e->getLine()."<br>";
         echo "数据库连接失败,发生错误的文件是:".$e->getFile()."<br>";
         exit;
     }
     // echo "数据库连接成功";
     //设置错误模式 忽略报错
     // $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_SILENT);
    
     //执行删除
     // $pdo->exec("delete from stu1 where id=182");
     //获取错误码
     // echo $pdo->errorCode();
     // if($pdo->errorCode()>0){
     //     // echo "error";
     //     //获取错误信息
     //     // echo "<pre>";
     //     // var_dump($pdo->errorInfo());
     //     echo "此sql语句有错误,原因是".$pdo->errorInfo()[2];
     // }else{
     //     echo "ok";
     // }
     $sql="select * from stu";
     //返回预处理对象
     // 预处理:就是把sql语句预先加载过来,只需要查询一次就可以把所有的结果获取到,提高sql语句的执行效率,减少sql语句的分析时间
     $list=$pdo->query($sql);
     // var_dump($list);
     //获取结果集
     $arr=$list->fetchAll(PDO::FETCH_ASSOC);
     echo "<pre>";
     var_dump($arr);
?>
5.事务操作(重点)
    事务:将多条sql语句 作为一个操作单元,要么都成功,要么都失败。
<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
</head>
<body>
    <center>
        <form action="doadd.php" method="post">
            用户名:<input type="text" name="name1"><br>
            年龄:<input type="text" name="age1"><br>
            班级:<input type="text" name="classid1"><br>
            性别:<input type="text" name="sex1"><br>
            用户名:<input type="text" name="name2"><br>
            年龄:<input type="text" name="age2"><br>
            班级:<input type="text" name="classid2"><br>
            性别:<input type="text" name="sex2"><br>
            用户名:<input type="text" name="name3"><br>
            年龄:<input type="text" name="age3"><br>
            班级:<input type="text" name="classid3"><br>
            性别:<input type="text" name="sex3"><br>
            <input type="submit" value="添加">
        </form>
    </center>
</body>
</html>

<?php
    try {
         //用pdo连接数据库
         $pdo=new PDO("mysql:host=localhost;dbname=o2o_15","root","123");
         //设置错误模式
         $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
         //设置字符集
         $pdo->exec("set names utf8");
     } catch (PDOException $e) {
         echo "数据库连接失败,原因是:".$e->getMessage()."<br>";
         echo "数据库连接失败,发生错误的行数是:".$e->getLine()."<br>";
         echo "数据库连接失败,发生错误的文件是:".$e->getFile()."<br>";
         exit;
     }
     try {
          //开启事务
         $pdo->beginTransaction();
         //准备sql
         $sql="insert into stu values(null,?,?,?,?)";
         //返回预处理
         $list=$pdo->prepare($sql);
         $m=0;
         for($i=1;$i<=3;$i++){
             //绑定值
             $list->bindValue(1,$_POST['name'.$i]);
             $list->bindValue(2,$_POST['age'.$i]);
             $list->bindValue(3,$_POST['classid'.$i]);
             $list->bindValue(4,$_POST['sex'.$i]);
             //执行
             $list->execute();
             //返回受影响行数
             $m+=$list->rowCount();
     }
     //事务提交
     $pdo->commit();
     echo "数据插入成功".$m;
     } catch (PDOException $e) {
         //事务回滚
         $pdo->rollback();
         echo "数据插入失败";
     }
    ?>

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多
    喜欢该文的人也喜欢 更多

    ×
    ×

    ¥.00

    微信或支付宝扫码支付:

    开通即同意《个图VIP服务协议》

    全部>>