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

一、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的事务处理

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。