美文网首页
mysqli 面向对象数据库操作教程

mysqli 面向对象数据库操作教程

作者: 咖啡di味道 | 来源:发表于2020-06-17 17:36 被阅读0次

    一、mysqli介绍

    PHP的开发离不开数据库,而在PHP中可以通过MySQLi连接数据库的。但是MySQLi只能连接mysql数据库。同时mysqli是一种面向对象的技术。
    MySQLi的特点:
    效率提高,稳定性强。
    对数据库进行操作。
    支持面向对象开发。同时也支持面向过程开发。
    想要在PHP中使用MySQLi功能需要在php.ini中加载php_mysql.dll这个动态连接文件。

    二、MySQL基本操作之-DDL,DML,DQL,DCL语句

    • DDL(数据定义语言)
      作用:数据定义语言主要用来定义数据库中的各类对象,包括用户、库、表、视图、索引、触发器、事件、存储过程和函数等。
    • DML(数据操纵语言)
      insert ,update ,delete 语句
    • DQL(数据查询语言)
      select 语句
    • DCL(数据控制语言)
      作用:用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果。
    1. DDL(数据定义语言)
      作用:数据定义语言主要用来定义数据库中的各类对象,包括用户、库、表、视图、索引、触发器、事件、存储过程和函数等。
    //常见的DDL操作的基本用法如下
       CREATE USER           #创建用户
       CREATE DATABASE       #创建数据库
       CREATE TABLE          #创建表
       CREATE VIEW           #创建视图
       CREATE INDEX          #创建索引
       CREATE TRIGGER        #创建触发器
       CREATE EVENT          #创建事件
       CREATE PROCEDURE      #创建存储过程
       CREATE FUNCTION       #创建自定义函数
    
    • 创建用户
      详细用法:CREATE USER 'username'@'[ip/domain/netmask]'

    参数解释:
    username:表示登陆MySQL实例的用户名
    [ip/domain/ip range]:表示数据库实例允许的登陆ip,域名或者ip段

    CREATE USER 'username'@'192.168.0.10';
    
    • 创建数据库
      CREATE DATABASE db_name;
    #创建一个名称为test_db,字符集为utf8的数据库
    mysql> CREATE DATABASE test_db DEFAULT CHARSET UTF8;
    
    • 创建表:

    详细用法:
    CREATE TABLE table_name;

    #创建一个名称为t_test,字符集为utf8,存储引擎为InnoDB,字符校验集为utf8_general_ci的表:
    mysql> CREATE TABLE t_test (
               id INT NOT NULL AUTO_INCREMENT,
               name VARCHAR(50),
               PRIMARY KEY(id)
           ) ENGINE = InnoDB DEFAUL CHARSET = UTF8 COLLATE = utf8_general_ci;
    
    • 创建视图:

    详细用法:
    CREATE VIEW view_name as <SELECT phrase>;
    参数解释: <SELECT phrase>:查询语句

    #创建一个视图t_view,用来查询t_test中的ID为1或者2的数据:
    mysql> CREATE VIEW test_view AS SELECT * FROM t_test WHERE id IN (1,2);
    #查看创建视图的过程:
    mysql> SHOW CREATE VIEW test_view;
    
    • 创建索引
      有两种方法,CREATE和ALTER,下面先介绍一下CREATE:

    CREATE [UNIQUE] INDEX index_name ON table_name(field[num]) <OPTIONS>;
    参数解释:
    UNIQUE:表示创建的索引类型为唯一索引,如果创建的为一般索引可以忽略该选项
    table_name:表名称
    field:表中的某个字段。num为可选参数,如果field为字符创类型,表示给该字段的前num个字符创建索引
    OPTIONS:表示可选选项,可以指定索引使用的算法,比如:USING BTREE。不指定默认为BTREE;

    mysql> CREATE UNIQUE INDEX name_ind ON t_test(name) USING BTREE;
    mysql> SHOW [INDEX/INDEXES] FROM t_test;  #查看t_test表中的索引,[INDEX/INDEXES]两个关键字都可以
    
    mysql> CREATE INDEX name_index ON t_test(name(5));
    
    • 创建触发器
    CREATE TRIGGER trigger_name trigger_time trigger_event FOR EACH ROW 
    BEGIN 
      trigger_stmt 
    END;
    
    • 创建存储过程
    CREATE PROCEDURE procedure_name([proc_parameter[,...]])
    BEGIN
      ...存储过程体
    END
    
    • 创建自定义函数
    CREATE FUNCTION function_name([func_parameter[,...]])
    RETURNS type
    BEGIN
    ...函数体
    END
    
    1. DML--数据操纵语言
      作用:用来操作数据库中的表对象,主要包括的操作有:
    • INSERT
    • UPDATE
    • DELETE
    INSERT INTO student(name,age,gender) VALUES('xiaohong',24,'M');
    
    UPDATE STUDENT SET name = 'xiaohua' WHERE id = 1;
    
     DELETE FROM student WHERE id = 1;
    
    1. DQL--数据查询语言
    • SELECT

    SELECT fields FROM table_name WHERE <condition>;

    SELECT * FROM table;
    
    #查询年龄大于23的记录
    mysql> SELECT * FROM student WHERE age > 23;
    #查询年龄大于等于24的记录,和上面age>23结果相同
    mysql> SELECT * FROM student WHERE age >= 24;
    #查询年龄小于24的记录
    mysql> SELECT * FROM student WHERE age < 24;
    #查询年龄小于等于24的记录
    mysql> SELECT * FROM student WHERE age <= 24;
    #查询姓名等于xiaohong的记录
    mysql> SELECT * FROM student WHERE name = 'xiaohong';
    #查询姓名不等于xiaohong的记录
    mysql> SELECT * FROM student WHERE name <> 'xiaohong'; 
    #查询姓名不等于xiaohong的记录
    mysql> SELECT * FROM student WHERE name != 'xiaohong';
    #查询姓名为xiaohong或者xiaohui的记录
    mysql> SELECT * FROM student WHERE name in ('xiaohong','xiaohui');
    #查询姓名不是xiaohong和xiaohui的记录等价于:where name != xiaohong and name != xiaohui
    mysql> SELECT * FROM student WHERE name not in ('xiaohong','xiaohui');
    #查询姓名以xiao开头的记录
    mysql> SELECT * FROM student WHERE name like 'xiao%';
    #查询姓名以xiaohon开头的记录,后面模糊匹配一位,如:xiaohong,xiaohoni
    mysql> SELECT * FROM student WHERE name like 'xiaohon_';
    #查询姓名中包含ao字符创的记录
    mysql> SELECT * FROM student WHERE name like '%ao%';
    #查询以hong结尾的记录
    mysql> SELECT * FROM student WHERE name not like '%hong';
    #使用正则表达式查询姓名以xiao开头的记录
    mysql> SELECT * FROM student WHERE name REGEXP('^xiao');
    #使用正则表达式查询姓名以hong结尾的记录
    mysql> SELECT * FROM student WHERE name REGEXP('hong$');
    #支持的其他复杂的正则表达式,请参阅资料:
    
    1. DCL--数据控制语言
      作用:用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果。
    • GRANT授予用户权限:
    mysql> GRANT INSERT,SELECT,UPDATE,DELETE ON test_db.* TO 'jerry'@'192.168.0.10' IDENTIFIED BY 'password' WITH GRANT OPTION;
    
    

    待完善

    三、mysqli 执行操作

    1. 创建mysqli对象
    $myconn= new mysqli(主机,账号,密码,数据库,端口号);
    
    1. 设置字符集
    $myconn=set_charset('utf8');
    
    1. 执行SQL语句

    mysqli_query - 对数据库执行一次查询

    -DDL(数据定义语言)

    $sql='select * from user';
    $myconn -> query($sql);
    
    1. 处理结果集
    • DML语句 Insert ,Update,Delete 返回布尔值True。
      当我们在进行插入,删除,修改(dml)时,返回的是一个布尔值,但是我们并不知道里面有没有变化。可以用$mysqli -> affected_rows,mysqli里面的属性进行判断,返回的结果是sql语句对数据表的影响行数。
    $myconn->affected_rows;
    
    • DQL语句 Select,返回mysqli_result
      将取回的结果显示页面取出数据有四种方式(assoc、row、object、array)我们一般使用assoc这种方式
      fetch_assoc()
      关联数组
    array(4) {
      ["id"]=>
      string(1) "1"
      ["name"]=>
      string(6) "小米"
      ["mark"]=>
      string(12) "小米手机"
      ["orderby"]=>
      string(1) "1"
    }
    

    fetch_row()
    索引数组

    array(3) {
      [0]=>
      string(1) "1"
      [1]=>
      string(6) "张三"
      [2]=>
      string(7) "1234.60"
    }
    

    fetch_array()
    返回的一个数组,是一个关联数组和索引数组组合的数组

    array(6) {
      [0]=>
      string(1) "1"
      ["id"]=>
      string(1) "1"
      [1]=>
      string(6) "张三"
      ["name"]=>
      string(6) "张三"
      [2]=>
      string(7) "1234.60"
      ["price"]=>
      string(7) "1234.60"
    }
    

    fetch_object()
    返回一个有一条数据封装成的对象

    object(stdClass)#3 (3) {
      ["id"]=>
      string(1) "1"
      ["name"]=>
      string(6) "张三"
      ["price"]=>
      string(7) "1234.60"
    }
    
    1. 释放资源
    $res -> free();
    $mysqli -> close();
    

    四、 mysqli的事务处理

    相关文章

      网友评论

          本文标题:mysqli 面向对象数据库操作教程

          本文链接:https://www.haomeiwen.com/subject/nkwjxktx.html