• mysqli


     1 CREATE TABLE `user` (
     2   `id` int(50) NOT NULL,
     3   `name` varchar(200) NOT NULL,
     4   `password` varchar(200) NOT NULL
     5 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     6  
     7 INSERT INTO `user` (`id`, `name`, `password`) VALUES
     8 (0, 'name0', '000000'),
     9 (1, 'name1', '000000'),
    10 (2, 'name2', '000000'),
    11 (3, 'name3', '000000'),
    12 (4, 'name4', '000000'),
    13 (5, 'name5', '000000');
    14 COMMIT;
    插入测试数据
     1 <?php // 插入测试数据
     2  /*  */
     3 
     4 $max=5;
     5 for ($i=0; $i<=$max; $i++) {
     6      $nName = "name".$i;
     7      $password = "000000";
     8 $sqlinuser ="INSERT INTO `user`(`id`, `name`, `password`) VALUES ($i,'$nName','$password');"; 
     9 inSql($sqlinuser); 
    10 }
    11  
    12  ?>
    1 $mysqli= new mysqli('localhost', 'root', 'root', 'test');  
    2 if (mysqli_connect_errno()) {printf("连接失败: %s
    ", mysqli_connect_error());exit();}    
     1     
     2 $city = "宿迁2";
     3 
     4 /* 创建准备好的语句 "SELECT District FROM City WHERE Name=?") */
     5 if ($stmt = $mysqli->prepare("SELECT District FROM tree WHERE Name=?")) {
     6 
     7     /* bind parameters for markers */
     8     $stmt->bind_param("s", $city);
     9 
    10     /* execute query */
    11     $stmt->execute();
    12 
    13     /* 绑定结果变量 */
    14     $stmt->bind_result($id);
    15 
    16     /* fetch value */
    17     $stmt->fetch();
    18 
    19     printf("%s 在区域 %s
    ", $city, $id);
    20 
    21     /* close statement */
    22     $stmt->close();
    23 }    
    24     
    25     
    查询所在的行
    if ($mysqli->multi_query($sql))  
        {
            do{
                $res = $mysqli->store_result();  
                 var_dump($res); //输出信息  
                if ($res instanceof mysqli_result)  
                {  
                //select 查询  
                    while ($row = $res->fetch_assoc())  
                    {  
                    //...  
                    }  
                }  
                else  
                {  
                    //insert update delete查询  
                }  
      
            } while ($mysqli->more_results() && $mysqli->next_result());  //调用next_result()之前必须调用more_result()  
        }  
    执行一个查询
     1 if ($stmt = $mysqli->prepare($query)) {
     2 
     3     // 执行查询 /
     4     $stmt->execute();
     5 
     6     // 存储结果//
     7     $stmt->store_result();
     8 
     9     printf("行数: %d.
    ", $stmt->num_rows);
    10 
    11     // 成功的结果 //
    12     $stmt->free_result();
    13 
    14     // 关闭语句 //
    15     $stmt->close();
    16 }
     1     // $stmt=$this->mysqli->prepare("SELECT surname, name, user_id, last_m_own, last_m_str, role FROM users WHERE referer_id=(?)");
     2     $stmt=$this->mysqli->prepare("select id,name,pid  from `tree`");
     3     $stmt->bind_param('i',$referer_id);
     4     $stmt->execute(); // 执行查询 
     5     $stmt->store_result();// 存储结果
     6     $stmt->bind_result($ans['id'], $ans['name'], $ans['pid']);
     7     $j=$stmt->num_rows;
     8     for ($i=0;$i<$j;$i++){
     9         $stmt->data_seek($i);
    10         $stmt->fetch();
    11         foreach ($ans as $key=>$value){
    12             $result[$i][$key]=$value;
    13    echo $result[$i]  ;
    14 
    15         }
    16     }
    查询3

      

    1 /* 关闭连接 */
    2 $mysqli->close();

    Php使用mysqli_result类处理结果集有以下几种方法

    fetch_all() 抓取所有的结果行并且以关联数据,数值索引数组,或者两者皆有的方式返回结果集。
    fetch_array() 以一个关联数组,数值索引数组,或者两者皆有的方式抓取一行结果。
    fetch_object() 以对象返回结果集的当前行。
    fetch_row() 以枚举数组方式返回一行结果
    fetch_assoc() 以一个关联数组方式抓取一行结果。
    fetch_field_direct() 以对象返回结果集中单字段的元数据。
    fetch_field() 以对象返回结果集中的列信息。
    fetch_fields() 以对象数组返回代表结果集中的列信息。

    fetch_all (从结果集中取得所有行作为关联数组)

    1  $sql="select * from user";
    2   $result=$link->query($sql);
    3   $row=$result->fetch_all(MYSQLI_BOTH);//参数MYSQL_ASSOC、MYSQLI_NUM、MYSQLI_BOTH规定产生数组类型
    4   $n=0;
    5   while($n<mysqli_num_rows($result)){
    6    echo "ID:".$row[$n]["id"]."用户名:".$row[$n]["name"]."密码:".$row[$n]["password"]."<br />";
    7    $n++;
    8   }

    输出结果:

    ID:0用户名:name0密码:000000
    ID:1用户名:name1密码:000000
    ID:2用户名:name2密码:000000
    ID:3用户名:name3密码:000000
    ID:4用户名:name4密码:000000
    ID:5用户名:name5密码:000000

     fetch_array (以一个关联数组,数值索引数组,或者两者皆有的方式抓取一行结果)

    1  $sql="select * from user";
    2         $result=$link->query($sql);
    3         while($row=$result->fetch_array()){
    4             echo "ID:".$row["id"]."用户名:".$row[1]."密码:".$row["password"]."<br />";
    5         }
    6 //fetch_array方法不再有结果时返回返回NULL
    7 //其返回结果可以是关联数组也可以是数值数组索引,故$row["id"]、$row[1]都可以

    fetch_object (以对象返回结果集的当前行)

    1  $sql="select * from user";
    2         $result=$link->query($sql);
    3         while($row=$result->fetch_object()){
    4             echo "ID:".$row->id."用户名:".$row->name."密码:".$row->password."<br />";
    5         }
    6 //如果无更多的行则返回NULL
    7 //返回的结果是对象,要以对象的方式调用

    fetch_row (以枚举数组方式返回一行结果)

    1  $sql="select * from user";
    2         $result=$link->query($sql);
    3         while($row=$result->fetch_row()){
    4             echo "ID:".$row[0]."用户名:".$row[1]."密码:".$row[2]."<br />";
    5         }
    6 //无更多行时返回NULL
    7 //以数值下标调用数组,a[0]正确、a["id"]则不

    fetch_assoc (以一个关联数组方式抓取一行结果)

    1   $sql="select * from user";
    2         $result=$link->query($sql);
    3         while($row=$result->fetch_assoc()){
    4             echo "ID:".$row["id"]."用户名:".$row["name"]."密码:".$row["password"]."<br />";
    5         }
    6 //无更多行时返回NULL
    7 //以关联索引访问数组,a["id"]正确、a[0]则不

    fetch_field_direct (以对象返回结果集中单字段的元数据既单列的信息)

    1  $sql="select * from user";
    2         $result=$link->query($sql);
    3         $n=0;
    4         while(1){
    5             if(!$row=$result->fetch_field_direct($n++)) break;
    6             echo "列名:".$row->name."所在表:".$row->table."数据类型:".$row->type."<br />";
    7         }
    8 //fetch_field_direct($n)只返回单个列,所以得不断调用该方法,没有该列时返回false

    fetch_field (以对象返回结果集中的列信息)

    1  $sql="select * from user";
    2         $result=$link->query($sql);
    3         while($row=$result->fetch_field()){
    4             echo "列名:".$row->name."所在表:".$row->table."数据类型:".$row->type."<br />";
    5         }
    6 //该方法检索所有的列
    7 //以对象方式返回列信息
    8 //返回对象属性如:name - 列名,table - 该列所在的表名,type - 该列的类型,等

    fetch_fields (以对象数组返回代表结果集中的列信息)

    1   $sql="select * from user";
    2         $result=$link->query($sql);
    3         $row=$result->fetch_fields();
    4         foreach($row as $val){
    5             echo "列名:".$val->name."所在表:".$val->table."数据类型:".$val->type."<br />";
    6         }
    7 //该方法功能与目的fetch_field一样
    8 //不一样的是该方法返回一个对象数组(如:echo $row[0]->name;输出第一列的名字),而不是一次检索一列

    另:mysqli_result类还有其他方法

    field_tell() 返回字段指针的位置
    data_seek() 调整结果指针到结果集中的一个任意行
    num_fields() 返回结果集中的字段数(列数)
    field_seek() 调整字段指针到特定的字段开始位置
    free()  释放与某个结果集相关的内存
    fetch_lengths() 返回结果集中当前行的列长度
    num_rows() 返回结果集中的行数

    MySQL联合查询效率较高,以下例子来说明联合查询(内联、左联、右联、全联)的好处:


    T1表结构(用户名,密码)   
    userid(int)   usernamevarchar(20)   passwordvarchar(20)   
    1   jack  jackpwd   
    2   owen  owenpwd   


    T2表结构(用户名,密码)   
    userid(int)   jifenvarchar(20)   dengjivarchar(20)   
        1   20   3   
        3   50   6   


    第一:内联(inner join)
    如果想把用户信息、积分、等级都列出来,那么一般会这样写:

    select * from T1, T3 where T1.userid = T3.userid
    (其实这样的结果等同于select * from T1 inner join T3 on T1.userid=T3.userid )。

    把两个表中都存在userid的行拼成一行(即内联),但后者的效率会比前者高很多,建议用后者(内联)的写法。

    SQL语句:
    select * from T1 inner join T2 on T1.userid = T2.userid

    运行结果   
    T1.userid   username   password   T2.userid   jifen   dengji   
    1   jack   jackpwd   1   20   3   



    第二:左联(left outer join)
    显示左表T1中的所有行,并把右表T2中符合条件加到左表T1中;
    右表T2中不符合条件,就不用加入结果表中,并且NULL表示。

    SQL语句:
    select * from T1 left outer join T2 on T1.userid = T2.userid

    运行结果   
    T1.userid   username   password   T2.userid   jifen   dengji   
    1   jack   jackpwd   1   20   3   
    2   owen   owenpwd   NULL   NULL   NULL   

    第三:右联(right outer join)。
    显示右表T2中的所有行,并把左表T1中符合条件加到右表T2中;
    左表T1中不符合条件,就不用加入结果表中,并且NULL表示。

    SQL语句:
    select * from T1 right outer join T2 on T1.userid = T2.userid

    运行结果   
    T1.userid   username   password   T2.userid   jifen   dengji   
    1   jack   jackpwd   1   20   3   
    NULL   NULL   NULL   3   50   6   

    第四:全联(full outer join)
    显示左表T1、右表T2两边中的所有行,即把左联结果表 + 右联结果表组合在一起,然后过滤掉重复的。

    SQL语句:
    select * from T1 full outer join T2 on T1.userid = T2.userid
     
    运行结果   
    T1.userid   username   password   T2.userid   jifen   dengji   
    1   jack   jackpwd   1   20   3   
    2   owen   owenpwd   NULL   NULL   NULL   
    NULL   NULL   NULL   3   50   6   

    总结,关于联合查询,效率的确比较高,4种联合方式如果可以灵活使用,基本上复杂的语句结构也会简单起来。

    mysql 联合查询后update

    SELECT a.user_name,a.avatar,a.nicheng,a.user_rank,b.rank_name,b.rank_img FROM ecs_users a , ecs_user_rank b 
    WHERE user_id in(101) and a.rank_points >= b.min_points and a.rank_points <= b.max_points ;


    update ecs_users a,ecs_user_rank b
    set a.user_rank =b.rank_id 
    WHERE user_id in(101) and a.rank_points >= b.min_points and a.rank_points <= b.max_points ;

  • 相关阅读:
    JS获取元素的子元素
    js iframe
    获取窗口句柄
    python 从PDF中提取附件
    xlwings 使用方法
    基于KNN的发票识别
    爬取漫画网站并进行图片拼接
    用python实现对元素的长截图
    Head First C 第三章总结
    Ruby on Rails Tutorial 第八章笔记 基本登陆功能
  • 原文地址:https://www.cnblogs.com/endv/p/8232468.html
Copyright © 2020-2023  润新知