目录
- 1.数据库
- 2.SQL语言
- 3.MySQLi扩展简介
- 为什么使用MySQLi扩展
- MySQLi的安装及配置
- 4.MySQLi操作数据库步骤
- 1.连接MySQL
- 2.设置字符集
- 3.打开指定数据库
- 4.执行SQL查询
- 增
- 删
- 改
- 查
- 5.释放结果集
- 6.关闭连接
- 5.MySQLi常用函数
- 连接相关
- 数据操作
- 预处理操作
- 结果集相关
- 事务
数据库
数据库是一某种有组织的方式存储数据或文件的集合,容器
表是一种结构化的文件(特定类型数据的结构化清单),存储特定类型的数据
模式:描述了数据库和表的布局及特性信息,定义数据在表中如何存储,存储什么样的数据,数据如何分解,各部分信息如何命名
列:表中的一个字段
行:一条记录
主健:一列或一组(多)列,其值能唯一区分表中的每一行。即表示特定的行。习惯:不重用,不更新,不修改
- 任意两行都不具有相同的值
- 每一个行都必须具有一个主健值,且不允许为空
数据库的好处:将数据持久化到本地,可以实现结构化查询,方便管理
- DB:数据库
- DBMS:数据库管理系统/软件
- SQL:结构化查询语言,用户和DBMS通讯
MySQL缺点: 并不总是支持其他DBMS提供的功能和特性
- 存储特点:将数据存储到表中,再将表存储到库中,
- 一个数据库中多个表,有名字且唯一。
- 表具有一些特性,定义数据在表中如何存储,类似‘类’。
- 表由列(字段)组成,类似’属性’.
- 表中数据按照行存储,类似‘对象’.
DBMS分类
- 基础共享文件系统
- 基础客户机-服务器软件: 服务器负责所有数据的访问处理软件,客户机与用户打交道的软件。
MySQL在4中引入InnoDB引擎,增加事务处理,改进全文搜索。4.1增加函数库,子查询,集成帮助。5增加存储过程,触发器,游标,视图。
- 读写分离:路由和分发的DS(datasource)
- 一个server方法必须定位到一个唯一的数据库上
- 在应用中需要自己去确定或者高速路由DS,访问的真实目标DS
- 让路由知道有那些真实的DS和他们的名字对应
- 让路由根据我传入的名字去返回真实的DataSource
依赖注入容器:就是一个对象,他知道怎么样初始化并配置对象及其依赖的所有对象
SQL语言
- DQL:数据库查询语言
- 基础查询,条件查询,排序查询,常见函数,分组函数,分组查询,连接查询,子查询,分页查询,union查询
- DML:数据操作语言
- 插入,修改,删除
- DDL:数据定义语言
- 库和表管理,常见数据类型,常见约束
- TCL:事务控制语言
- 事务和事务处理
不区分大小写:建议关键字大小,自定义名字小写!
分号结尾,索引与换行
注释 (#)或(– )或(/ /)
相关操作
显示所有数据库
- show databases;
使用(进入)指定数据库
- use mysql;
显示库中所有表
- show tables;
- show tables from phpstudy;
选择查询当前所在数据库
- select databases();
创建表:
- create table t_mysql (id int, name varchar(20));
删除表:
- drop table t_mysql;
查看表结构:
- desc t_mysql;
插入数据:
- insert into t_mysql (id, name) values (2,”Vivian”);
查询数据库所有字段:
- select * from t_mysql;
更新数据库:
- update t_mysql set name=”MySQL” where id=4;
删除表中数据
- delete from t_mysql where id=4 or name=”MySQL”;
- delete from t_mysql; // 删除所有
使用delete删除的数据可以找回
使用drop删除的数据找不回来
- 查看版本:
- mysql> select version();
MySQLi简介
PHP5.4之后mysql扩展废弃,不再更新,官方推荐使用mysqli,mysqli是mysql扩展的增强版,5.4默认支持
#####mysqli功能
- 操作数据库
- 面向对象和面向过程
- 支持预处理
- 支持多语句
- 支持事务
MySQLi配置
略过安装,因为默认支持,如果是集成环境,也是不用安装和配置的!
- 配置php_mysqli.dll扩展,在php.ini中开启
- 配置extension_dir=”ext所在目录”
- 重启服务器
MySQL相关配置
- mysqli.max_persistent = -1
- 可以创建的持久化连接的最大数量,-1代表无限制
- mysqli.allow_local_infile = On
- 允许Mysql的Load Data语句访问PHP角度看的本地文件。
- mysqli.allow_persistent = On
- 开启使用mysqli_connect()函数创建持久化连接的能力
- mysqli.max_links = -1
- 最大连接数,-1代表无限制
- mysqli.default_port = 3306
- 默认端口号3306
- mysqli.default_socket =
- 当连接到本地数据库服务器时如果没有指定其他socket名称,使用的默认socket名称
- mysqli.default_host =
- 当连接到数据库服务器时, 如果没有指定其他主机地址,使用的默认服务器主机。不要在 安全模式下使用
- mysqli.default_user =
- 当连接到数据库服务器时,如果没有指定其他用户名,使用的默认用户名。不要在 安全模式下使用。
- mysqli.default_pw =
- 当连接到数据库服务器时,如果灭有指定其他密码,使用的默认密码。不要在 安全模式下使用。
- mysqli.reconnect = Off
- 连接丢失时是否自动重新连接。
MySQLi检测
- phpinfo #php配置
- extension_loaded(‘mysqli’) #连接方法
- mysqli_connect() # 直接调用
- function_exists(‘mysqli_connect’) #是否存在方法
- get_defined_functions() #s获取定义的方法
MySQLi操作步骤
PHP打开错误提示和关闭错误提示的方法
- 找到php的配置文件,也就是php.ini
在文件中查找 ‘display_errors’ 查找到 display_errors = Off 或者 display_errors = On, Off为关闭错误提示,On为打开错误提示,根据需求修改即可。
- 也可在php文件中加入以下代码
1 | //禁用错误报告 |
一、建立连接
- 直接连接
1 | header('content-type:text/html;charset=utf-8'); |
- 初始化连接
1 |
|
- 查看配置信息
1 |
|
错误类型
- 1》用户名密码不正确
- Warning: mysqli_connect(): (HY000/1045): Access denied for user ‘root‘@’localhost’
(using password: YES) in G:\maizi\PHPAdvance\MySQLi\2-mysqli_connect.php on line 5
bool(false)- 2》MySQL服务器没有开启
- ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061)
Warning: mysqli_connect(): in G:\maizi\PHPAdvance\MySQLi\2-mysqli_connect.php on line 13
bool(false)
- ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061)
- 2》MySQL服务器没有开启
- Warning: mysqli_connect(): (HY000/1045): Access denied for user ‘root‘@’localhost’
- 1》用户名密码不正确
抑制错误:
- @mysqli_connect(‘localhost’, ‘root’, ‘root’, ‘mysqli’,’8889’) or die(‘数据库连接失败
ERROR’.mysqli_connect_errno().’:’.mysqli_connect_error());
- @mysqli_connect(‘localhost’, ‘root’, ‘root’, ‘mysqli’,’8889’) or die(‘数据库连接失败
1 | //mysqli_connect_errno():连接产生的错误编号 |
二、设置字符集
- 命令:SET NAMES GBK
- mysqli_set_charset($link, ‘UTF8’);
- mysqli_query($link, ‘SET NAMES UTF8’);
- print_r(mysqli_character_set_name($link)); // 默认
- print_r(mysqli_get_charset($link)); // 获取
三、打开指定数据库
$res = mysqli_select_db($link,'mysqli'); # or die('指定数据库不存在<\br>'.mysqli__errno($link).':'.mysqli__error($link));
var_dump($res);
执行SQL查询
- SQL直接Query创建和插入
1 | 执行SQL查询 mysqli_query()执行SQL查询 |
- SQL-Query插入和查询
1 | 执行SQL查询 |
- mysqli_affected_rows
1 | 执行SQL查询 |
- mysqli_fetch
1 | 执行SQL查询 |
查询并显示用户列表数据
- mysqli_fetch
1 |
|
- user_list
1 | 执行SQL查询 |
- mysqli_data_seek
1 | $sql="SELECT * FROM user"; |
- mysqli_field
1 | $sql="SELECT * FROM user"; |
- mysqli_multi_query
1 | //执行多条SQL语句,每条SQL语句一定要以分号结尾,否则就会失败 |
- mysqli_multi_result
1 | $sql ="SELECT id,username,age,regTime FROM user limit 5;"; |
- mysqli_prepare
1 | require_once 'conn.php'; |
- mysqli_stmt_bind_result
1 | require_once 'conn.php'; |
- mysqli_stmt_data_seek
1 | require_once 'conn.php'; |
- mysqli_commit
1 | require_once 'conn.php'; |
- reg
1 | <!doctype html> |
- testFunction
1 | header('content-type:text/html;charset=utf-8'); |
释放结果集
关闭连接
MySQLi常见函数
连接
连接
mysqli_connect()
- 作用
- 打开一个到MySQL服务器的新的连接
- 语法
- mysqli mysqli_connect ([ string $host = ini_get(“mysqli.default_host”) [, string $username = ini_get(“mysqli.default_user”) [, string $passwd = ini_get(“mysqli.default_pw”) [, string $dbname = “” [, int $port = ini_get(“mysqli.default_port”) [, string $socket = ini_get(“mysqli.default_socket”) ]]]]]] )
- 作用
mysqli_real_connect()
- 作用
- 建立一个 MySQL 服务器连接
- 语法
- bool mysqli_real_connect ( mysqli $link [, string $host [, string $username [, string $passwd [, string $dbname [, int $port [, string $socket [, int $flags ]]]]]]] )
- 注意
- mysqli_real_connect() 需要一个有效的对象,这个对象由 mysqli_init() 创建
- 可以使用 mysqli_options() 设置各种连接设置
- 提供 flags 参数
- 作用
mysqli_init()
- 作用
- 初始化mysqli并且返回一个由mysqli_real_connect使用的资源类型。
- 语法
- mysqli mysqli_init ( void )
- 作用
mysqli_options()
- 作用
- 设置选项
- 语法
- bool mysqli_options ( mysqli $link , int $option , mixed $value )
- 注意
- 常用选项
- 作用
mysqli_ping()
- 作用
- ping一个服务器连接,或者如果那个连接断了尝试重连
- 语法
- bool mysqli_ping ( mysqli $link )
- 作用
错误
- mysqli_connect_errno()
- 作用
- 返回最后一次连接调用的错误代码
- 作用
- mysqli_connect_error()
- 作用
- 返回一个字符串描述的最后一次连接调用的错误代码
- 作用
- mysqli_errno()
- 作用
- 返回最近的函数调用产生的错误代码
- 语法
- int mysqli_errno ( mysqli $link )
- 作用
- mysqli_error()
- 作用
- 返回字符串描述的最近一次函数调用产生的错误代码
- 语法
- string mysqli_error ( mysqli $link )
- 作用
字符集
- mysqli_character_set_name()
- 作用
- 返回数据库连接的默认字符集
- 作用
- mysqli_get_charset()
- 作用
- 返回对象的字符集
- 语法
- object mysqli_get_charset ( mysqli $link )
- 作用
- mysqli_set_charset()
- 作用
- 设置默认的客户端字符集
- 语法
- bool mysqli_set_charset ( mysqli $link , string $charset )
- 作用
信息相关
- mysqli_get_client_info()
- 作用
- 返回字符串类型的Mysql客户端版本信息
- 语法
- string mysqli_get_client_info ( mysqli $link )
mysqli_get_client_version()
- string mysqli_get_client_info ( mysqli $link )
- 作用
- 将 MySQL 客户端库版本作为整数返回
- 语法
- int mysqli_get_client_version ( mysqli $link )
- 作用
- mysqli_get_server_info()
- 作用
- 返回MySQL服务器的版本号
- 语法
- string mysqli_get_server_info ( mysqli $link )
mysqli_get_server_version()
- string mysqli_get_server_info ( mysqli $link )
- 作用
- 作为一个整数返回MySQL服务器的版本
- 语法
- int mysqli_get_server_version ( mysqli $link )
- 作用
- mysqli_get_host_info()
- 作用
- 返回 MySQL 服务器主机名和连接类型。
- 语法
- string mysqli_get_host_info ( mysqli $link )
- 作用
- mysqli_get_proto_info()
- 作用
- 返回使用的Mysql协议的版本信息
- 语法
- int mysqli_get_proto_info ( mysqli $link )
- 作用
- mysqli_stat()
- 作用
- 获取当前系统状态
- 语法
- string mysqli_stat ( mysqli $link )
- 作用
- mysqli_thread_id()
- 作用
- 返回当前连接的线程ID
- 语法
- int mysqli_thread_id ( mysqli $link )
- 作用
- mysqli_thread_safe()
- 作用
- 返回是否设定了线程安全
- 语法
- bool mysqli_thread_safe ( void )
- 作用
数据操作
数据库
- mysqli_select_db()
- 作用
- 为数据库查询选择默认数据库
- 语法
- bool mysqli_select_db ( mysqli $link , string $dbname )
- 作用
数据
- mysqli_query()
- 作用
- 执行SQL查询
- 语法
- mixed mysqli_query ( mysqli $link , string $query [, int $resultmode = MYSQLI_STORE_RESULT ] )
- 注意
- $resultmode值
- MYSQLI_USE_RESULT,检索大数据量
- MYSQLI_STORE_RESULT,默认值
- 执行其它查询,成功返回true,失败返回false
- $resultmode值
- 作用
- mysqli_real_query()
- 作用
- 执行一个mysql查询
- 语法
- bool mysqli_real_query ( mysqli $link , string $query )
- 注意
- 执行一个单条数据库查询, 其结果可以使用mysqli_store_result()或mysqli_use_result()检索或存储.
- 可以通过mysqli_field_count()得到结果集的数量
- 作用
- mysqli_multi_query()
- 作用
- 在数据库上执行一个多语句查询
- 作用
- mysqli_affected_rows()
- 作用
- 得到上一次MySQL操作影响的记录数
- 语法
- int mysqli_affected_rows ( mysqli $link )
- 作用
- mysqli_insert_id()
- 作用
- 返回上一插入操作产生的AUTO_INCREMENT的值
- 语法
- mixed mysqli_insert_id ( mysqli $link )
- 作用
预处理操作
- mysqli_prepare()
- 作用
- 准备一个用于执行的SQL语句
- 语法
- mysqli_stmt mysqli_prepare ( mysqli $link , string $query )
- 作用
mysqli_stmt_bind_param()
- 作用
- 将一个变量作为参数绑定到prepared语句上
- 语法
- bool mysqli_stmt_bind_param ( mysqli_stmt $stmt , string $types , mixed &$var1 [, mixed &$… ] )
- 注意
- $types的值
- 作用
mysqli_stmt_bind_result()
- 作用
- 将一个变量绑定到一个prepared语句上用于结果存储
- 语法
- bool mysqli_stmt_bind_result ( mysqli_stmt $stmt , mixed &$var1 [, mixed &$… ] )
mysqli_stmt_execute()
- bool mysqli_stmt_bind_result ( mysqli_stmt $stmt , mixed &$var1 [, mixed &$… ] )
- 作用
- 执行一个prepared查询
- 语法
- bool mysqli_stmt_execute ( mysqli_stmt $stmt )
- 作用
- mysqli_stmt_affected_rows()
- 作用
- 返回最后一条倍执行的语句改变,删除或插入的总行数
- 语法
- int mysqli_stmt_affected_rows ( mysqli_stmt $stmt )
- 作用
- mysqli_stmt_insert_id()
- 作用
- 获取前一个INSERT操作生成的ID
- 语法
- mixed mysqli_stmt_insert_id ( mysqli_stmt $stmt )
- 作用
- mysqli_stmt_errno()
- 作用
- 返回最近一次语句调用的错误代码
- 语法
- int mysqli_stmt_errno ( mysqli_stmt $stmt )
- 作用
- mysqli_stmt_error()
- 作用
- 返回最后一条语句错误的字符串描述
- 语法
- string mysqli_stmt_error ( mysqli_stmt $stmt )
- 作用
- mysqli_stmt_num_rows()
- 作用
- 返回语句结果集中的行数
- 语法
- int mysqli_stmt_num_rows ( mysqli_stmt $stmt )
- 作用
- mysqli_stmt_param_count()
- 作用
- 返回给定语句中参数数量
- 语法
- int mysqli_stmt_param_count ( mysqli_stmt $stmt )
- 作用
- mysqli_stmt_data_seek()
- 作用
- 查看语句结果集中的任意行
- 语法
- void mysqli_stmt_data_seek ( mysqli_stmt $stmt , int $offset )
- 作用
- mysqli_stmt_fetch()
- 作用
- 从一个prepared语句中抓取结果到指定变量中
- 语法
- bool mysqli_stmt_fetch ( mysqli_stmt $stmt )
- 作用
- mysqli_stmt_free_result()
- 作用
- 释放给定语句处理存储的结果集所占内存
- 语法
- void mysqli_stmt_free_result ( mysqli_stmt $stmt )
- 作用
- mysqli_stmt_num_rows()
- 作用
- 返回结果集中记录的条数
- 语法
- int mysqli_stmt_num_rows ( mysqli_stmt $stmt )
- 作用
- mysqli_stmt_store_result()
- 作用
- 从一个prepared语句中传输一个结果集
- 语法
- bool mysqli_stmt_store_result ( mysqli_stmt $stmt )
- 作用
结果集
- mysqli_use_result()
- 作用
- 初始化一个结果集的取回
- 语法
- mysqli_result mysqli_use_result ( mysqli $link )
- 作用
- mysqli_more_results()
- 作用
- 检查一个多语句查询是否还有其他查询结果集
- 语法
- bool mysqli_more_results ( mysqli $link )
- 作用
- mysqli_next_result()
- 作用
- 从multi_query中准备下一个结果集
- 语法
- bool mysqli_next_result ( mysqli $link )
- 作用
- mysqli_num_rows()
- 作用
- 获取结果集中记录条数
- 语法
- int mysqli_num_rows ( mysqli_result $result )
- 作用
- mysqli_fetch_all()
- 作用
- 抓取所有的结果行并且以关联数据,数值索引数组,或者两者皆有的方式返回结果集。仅可用于 mysqlnd。
- 语法
- mixed mysqli_fetch_all ( mysqli_result $result [, int $resulttype = MYSQLI_NUM ] )
- 作用
- mysqli_fetch_array()
- 作用
- 以一个关联数组,数值索引数组,或者两者皆有的方式抓取一行结果
- 语法
- mixed mysqli_fetch_array ( mysqli_result $result [, int $resulttype = MYSQLI_BOTH ] )
- 作用
- mysqli_fetch_assoc()
- 作用
- 以一个关联数组方式抓取一行结果
- 语法
- array mysqli_fetch_assoc ( mysqli_result $result )
- 作用
- mysqli_fetch_row()
- 作用
- 以索引数组返回结果集中的一行
- 语法
- mixed mysqli_fetch_row ( mysqli_result $result )
- 作用
- mysqli_fetch_object()
- 作用
- 以一个对象的方式返回一个结果集中的当前行
- 语法
- object mysqli_fetch_object ( mysqli_result $result [, string $class_name = “stdClass” [, array $params ]] )
- 作用
- mysqli_data_seek()
- 作用
- 将结果中的结果指针调整到任意行
- 语法
- 将结果中的结果指针调整到任意行
- 作用
- mysqli_field_count()
- 作用
- 返回最近一次查询获取到的列的数目
- 语法
- int mysqli_field_count ( mysqli $link )
- 作用
- mysqli_num_fields()
- 作用
- 获取结果中字段数量
- 语法
- int mysqli_num_fields ( mysqli_result $result )
- 作用
- mysqli_fetch_field()
- 作用
- 从结果集中取得下一字段(列),并作为对象返回
- 语法
- mysqli_fetch_field(result);
- 作用
- mysqli_fetch_fields()
- 作用
- 返回一个代表结果集字段的对象数组
- 语法
- array mysqli_fetch_fields ( mysqli_result $result )
- 作用
- mysqli_field_seek()
- 作用
- 设置结果指针到特定的字段开始位置
- 语法
- bool mysqli_field_seek ( mysqli_result $result , int $fieldnr )
- 作用
- mysqli_field_tell()
- 作用
- 获取当前字段在结果集指针中的开始位置
- 语法
- int mysqli_field_tell ( mysqli_result $result )
- 作用
- mysqli_fetch_field_direct()
- 作用
- 抓取一个单字段的元数据
- 语法
- object mysqli_fetch_field_direct ( mysqli_result $result , int $fieldnr )
- 作用
事务
- mysqli_autocommit()
- 作用
- 打开或关闭数据库的自动提交功能
- 语法
- bool mysqli_autocommit ( mysqli $link , bool $mode )
- 作用
- mysqli_commit()
- 作用
- 提交当前事务
- 语法
- bool mysqli_commit ( mysqli $link )
- 作用
- mysqli_rollback()
- 作用
- 回滚当前事务
- 语法
- bool mysqli_rollback ( mysqli $link )
- 作用