PHP第二十九篇——MySQLi入门与常用操作总结

目录

  • 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分类
  1. 基础共享文件系统
  2. 基础客户机-服务器软件: 服务器负责所有数据的访问处理软件,客户机与用户打交道的软件。

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功能

  1. 操作数据库
  2. 面向对象和面向过程
  3. 支持预处理
  4. 支持多语句
  5. 支持事务

MySQLi配置

略过安装,因为默认支持,如果是集成环境,也是不用安装和配置的!

  1. 配置php_mysqli.dll扩展,在php.ini中开启
  2. 配置extension_dir=”ext所在目录”
  3. 重启服务器
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检测

  1. phpinfo #php配置
  2. extension_loaded(‘mysqli’) #连接方法
  3. mysqli_connect() # 直接调用
  4. function_exists(‘mysqli_connect’) #是否存在方法
  5. get_defined_functions() #s获取定义的方法

MySQLi操作步骤

PHP打开错误提示和关闭错误提示的方法
  1. 找到php的配置文件,也就是php.ini

在文件中查找 ‘display_errors’ 查找到 display_errors = Off 或者 display_errors = On, Off为关闭错误提示,On为打开错误提示,根据需求修改即可。

  1. 也可在php文件中加入以下代码
1
2
3
4
5
6
//禁用错误报告
error_reporting(0);
//报告运行时错误
error_reporting(E_ERROR | E_WARNING | E_PARSE);
//报告所有错误
error_reporting(E_ALL);
一、建立连接
  • 直接连接
1
2
3
4
5
6
7
8
9
10
header('content-type:text/html;charset=utf-8');
##### 建立连接: 这里使用MAMP默认提供的mysql和端口
$link = mysqli_connect('localhost', 'root', 'root', 'mysqli','8889');
var_dump($link);
if (!$link) {
echo "错误连接";
echo 'ERROR'.mysqli_connect_errno().':'.mysqli_connect_error();
exit();
}
echo "成功";
  • 初始化连接
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

$link=mysqli_init();
if(!$link){
die('MySQLi Init Failed');
}

设置连接选项
if(!mysqli_options($link,MYSQLI_INIT_COMMAND,'SET AUTOCOMMIT=0')){
die('MySQLI Options Failed');
}
//建立MySQL的连接
if(!mysqli_real_connect($link,'localhost','root','root')){
die('Connect Error <br/>'.mysqli_connect_errno().':'.mysqli_connect_error());
}
if(mysqli_ping($link)){
echo 'Connect is Ok';
}else{
echo 'Error '.mysqli_error();
}
  • 查看配置信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

//得到和MySQL相关信息
echo 'MySQL客户端版本信息:'.mysqli_get_client_info($link).'<br/>';
echo 'MySQL客户端版本:'.mysqli_get_client_version($link).'<br/>';
echo 'MySQL服务器的版本号:'.mysqli_get_server_info($link).'<br/>';
echo 'MySQL服务器的版本:'.mysqli_get_server_version($link).'<br/>';
echo 'MySQL服务器主机名和连接类型:'.mysqli_get_host_info($link).'<br/>';
echo 'MySQL协议的版本信息:'.mysqli_get_proto_info($link).'<br/>';
echo '当前系统的状态:'.mysqli_stat($link).'<br/>';
echo '当前线程连接ID:'.mysqli_thread_id($link).'<br/>';
if(mysqli_thread_safe()){
echo '启动安全线程';
}else{
echo '未启动安全线程';
}
  • 错误类型

    • 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)
  • 抑制错误:

    • @mysqli_connect(‘localhost’, ‘root’, ‘root’, ‘mysqli’,’8889’) or die(‘数据库连接失败
      ERROR’.mysqli_connect_errno().’:’.mysqli_connect_error());
1
2
//mysqli_connect_errno():连接产生的错误编号
//mysqli_connect_error():连接产生的错误信息
二、设置字符集
  1. 命令:SET NAMES GBK
  2. mysqli_set_charset($link, ‘UTF8’);
  3. 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
执行SQL查询 mysqli_query()执行SQL查询
//创建test2数据库
// $sql="CREATE DATABASE IF NOT EXISTS test2 DEFAULT CHARACTER SET 'utf8'";
// $sql="DROP DATABASE IF EXISTS test2";
// mysqli_query($link,$sql);
/*
mysqli_query($link,$sql):执行SQL查询
1》只能执行一条SQL语句,SQL语句可以没有分号
2》mysqli_query()执行SELECT/SHOW/EXPLAIN/DESC/DESCRIBE这样关键字的SQL语句,执行
成功返回的是mysqli_result结果集,执行失败返回false
执行其他SQL语句,执行成功返回true,失败返回false
*/
$sql=<<<EOF
INSERT user(username,password,age,regTime)
VALUES('king1','king1',123,'123123');
EOF;
$res=mysqli_query($link,$sql);
var_dump($res);
  • SQL-Query插入和查询
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
执行SQL查询
// $sql='INSERT user(username,password,age,regTime) VALUES("maizi1","maizi1",3,"1234123")';
// $sql="INSERT user1(id,username,password,age,regTime) VALUES(8,'queen','queen',14,'123123123')";
$sql=<<<EOF
INSERT user(username,password,age,regTime) VALUES('maizi11','maizi11',3,'123123'),
('maizi12','maizi12',3,'123123'),
('maizi13','maizi13',3,'123123'),
('maizi14','maizi14',3,'123123'),
('maizi15','maizi15',3,'123123');
EOF;
$res=mysqli_query($link,$sql);
if($res){
// mysqli_insert_id($link):得到上一步插入操作产生的自增长(AUTO_INCREMENT)值,如果表中没有自增长,返回0
$lastInsertId=mysqli_insert_id($link);
echo '恭喜您注册成功,您是网站的第'.$lastInsertId.'位用户<br/>';
//mysqli_affected_rows($link):得到上一步操作产生的受影响的记录数
$affectRows=mysqli_affected_rows($link);
echo 'Query Ok, '.$affectRows.' Rows Affected';
}else{
echo 'Insert Error '.mysqli_errno($link).':'.mysqli_error($link);
}
  • mysqli_affected_rows
1
2
3
4
5
6
7
8
9
10
11
12
执行SQL查询
// $sql="INSERT user(username,password,age,regTime) VALUES('AA','AA',12,'123123')";
// $sql="UPDATE user SET age=78 WHERE id<=5";
$sql="DELETE FROM user324234 WHERE id=9";
$res=mysqli_query($link,$sql);
echo '受影响的记录数为:'.mysqli_affected_rows($link).'<br/>';
/*
mysqli_affected_rows($link):得到上一步操作产生的受影响的记录数
大于0的:受影响的记录数
等于0:没有记录被影响
等于-1:代表的SQL语句有问题
*/
  • mysqli_fetch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
执行SQL查询
$sql="SELECT * FROM user";
// $sql="SHOW DATABASES;";
// $sql="DESC user";
// $sql="DESCRIBE user";
// $sql="EXPLAIN SELECT * FROM user WHERE id=12";
$result=mysqli_query($link,$sql);
//得到结果集中的记录条数
echo '结果集中记录条数为:'.mysqli_num_rows($result).'<br/>';
echo '上一步操作产生的受影响的记录条数为:'.mysqli_affected_rows($link).'<br/>';
echo '结果集中字段数为:'.mysqli_num_fields($result).'<br/>';
echo '获得最近一次查询所得到的列数:'.mysqli_field_count($link).'<br/>';

echo '<hr color="red"/>';
//取得结果集中的记录
// mysqli_fetch_row($result):取得结果集中的一条记录作为索引数组返回
echo '<pre>';
$row=mysqli_fetch_row($result);
print_r($row);
//mysqli_fetch_assoc($result):取得结果集中的一条记录作为关联数组返回
$row=mysqli_fetch_assoc($result);
print_r($row);
//mysqli_fetch_array($result,$result_type):取得结果集中的一条记录作为关联数组或者索引数组或者二者都有的数组来返回
$row=mysqli_fetch_array($result, MYSQLI_ASSOC);
/*
$result_type的值为:
MYSQLI_BOTH:关联+索引
MYSQLI_ASSOC:关联
MYSQLI_NUM:索引
*/
print_r($row);
// mysqli_fetch_object($result):作为对象返回
$row=mysqli_fetch_object($result);
print_r($row);
echo '<hr color="red"/>';
var_dump(mysqli_fetch_assoc($result));
查询并显示用户列表数据
  • mysqli_fetch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

执行SQL查询
$sql="SELECT * FROM user";
//5.得到所有记录
$result=mysqli_query($link,$sql);
//是结果集,并且结果集中有记录
// if($result && mysqli_num_rows($result)>0){
// while($row=mysqli_fetch_assoc($result)){
// $rows[]=$row;
// }
// }else{
// echo '没有记录<br/>';
// }

// print_r($rows);
// if($result && mysqli_num_rows($result)>0){
// // $rows=mysqli_fetch_all($result);
// $rows=mysqli_fetch_all($result,MYSQLI_BOTH);
// }
// print_r($rows);
$string=join('',array_merge(range('a','z'),range('A','Z')));
for($i=1;$i<=100;$i++){
$username=substr(str_shuffle($string),0,5);
$password=md5($username);
$age=mt_rand(1,99);
$regTime=time()+10*$i;
$sql="INSERT user(username,password,age,regTime) VALUES('{$username}','{$password}','{$age}','{$regTime}')";
mysqli_query($link,$sql);
}
  • user_list
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
执行SQL查询
$sql="SELECT id,username,age,regTime FROM user";
//5.得到所有记录
$result=mysqli_query($link,$sql);
if($result && mysqli_num_rows($result)>0){
$rows=mysqli_fetch_all($result,MYSQLI_ASSOC);
}
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<h3>用户列表</h3>
<table border='1' cellpadding='0' cellspacing='0' bgcolor='#ABCDEF' width='80%'>
<tr>
<td>编号</td>
<td>用户名</td>
<td>年龄</td>
<td>注册时间</td>
</tr>
<?php $i=1; foreach($rows as $user):?>
<tr>
<td><?php echo $i++;?></td>
<td><?php echo $user['username'];?></td>
<td><?php echo $user['age'];?></td>
<td><?php echo date("Y-m-d H:i:s",$user['regTime']);?></td>
</tr>
<?php endforeach;?>
</table>

</body>
</html>


  • mysqli_data_seek
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$sql="SELECT * FROM user";
$result=mysqli_query($link, $sql);
echo '<pre>';
// $row=mysqli_fetch_assoc($result);
// print_r($row);
// $row=mysqli_fetch_assoc($result);
// print_r($row);
// $row=mysqli_fetch_assoc($result);
// print_r($row);
// echo '<hr/>';
// //mysqli_data_seek($result,$offset):将结果集的指针移动到指定位置
// mysqli_data_seek($result, 0);

// $row=mysqli_fetch_assoc($result);
// print_r($row);

$rows=mysqli_fetch_all($result,MYSQLI_ASSOC);
print_r($rows);
echo '<hr color="red"/>';
mysqli_data_seek($result, 0);
$row=mysqli_fetch_assoc($result);
print_r($row);
echo '<hr color="pink"/>';
//释放结果集
mysqli_free_result($result);
//关闭连接
mysqli_close($link);
mysqli_set_charset($link,'utf8');
  • mysqli_field
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$sql="SELECT * FROM user";
$result=mysqli_query($link, $sql);
echo '结果集中字段数:'.mysqli_num_fields($result).'<br/>';
echo mysqli_field_count($link).'<br/>';
echo '<hr/>';
echo '<pre>';
// $fieldInfo=mysqli_fetch_field($result);
// print_r($fieldInfo);

// $fieldInfo=mysqli_fetch_field($result);
// print_r($fieldInfo);
// $fieldsInfo=mysqli_fetch_fields($result);
// print_r($fieldsInfo);
echo '当前指针所在位置:'.mysqli_field_tell($result).'<br/>';
print_r(mysqli_fetch_field_direct($result, 0)).'<br/>';
echo '<hr/>';
mysqli_field_seek($result, 3);
echo '当前指针所在位置:'.mysqli_field_tell($result).'<br/>';
  • mysqli_multi_query
1
2
3
4
5
6
7
//执行多条SQL语句,每条SQL语句一定要以分号结尾,否则就会失败
//如果多条SQL语句中有一条失败了,整个都会失败
$sql="DELETE FROM user WHERE id=3;";
$sql.="INSERT user(username,password,age,regTime) VALUES('AAAA1','AAAAA1',99,'1234123');";
$sql.="UPDATE user123 SET age=5 WHERE id=1;";
$res=mysqli_multi_query($link,$sql);
var_dump($res);
  • mysqli_multi_result
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$sql ="SELECT id,username,age,regTime FROM user limit 5;";
$sql.="SELECT VERSION() AS mysql_version;";
$sql.="SELECT NOW() AS time_now;";
$sql.="SELECT * FROM mysql.user;";
$res=mysqli_multi_query($link, $sql);
//mysqli_store_result():传输上一次产生的结果集
//mysqli_more_results():判读是否有更多的结果集
//mysqli_next_result():将结果集的指针向下移动一位
if($res){
do{
if($result=mysqli_store_result($link)){
$rows[]=mysqli_fetch_all($result,MYSQLI_ASSOC);
}
}while(mysqli_more_results($link)&&mysqli_next_result($link));
}
print_r($rows);
  • mysqli_prepare
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
require_once 'conn.php';
$sql="INSERT user(username,password,age,regTime) VALUES(?,?,?,?)";
$stmt=mysqli_prepare($link, $sql);//准备要执行的SQL语句
// print_r($stmt);
$username='maizi123412';
$password='maizi123412';
$age=3;
$regTime=time();
@mysqli_stmt_bind_param($stmt, 'ssii',$username,$password,$age);
$res=mysqli_stmt_execute($stmt);
if(!$res){
die ("ERROR ".mysqli_stmt_errno($stmt).':'.mysqli_stmt_error($stmt));
}

$username='maizi1234567';
$password='maizi1234567';
$age=35;
$regTime=time();
mysqli_stmt_execute($stmt);

echo '受影响的记录条数为:'.mysqli_stmt_affected_rows($stmt).'<br/>';
echo '得到AUTO_INCREMENT的之为:'.mysqli_stmt_insert_id($stmt).'<br/>';


mysqli_stmt_close($stmt);
mysqli_close($link);
  • mysqli_stmt_bind_result
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
require_once 'conn.php';
$sql="SELECT id,username,age FROM user WHERE id<=?";
if($stmt=mysqli_prepare($link, $sql)){
echo mysqli_stmt_param_count($stmt).'个参数<br/>';
$id=143;
mysqli_stmt_bind_param($stmt, 'i',$id);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt,$res_id,$res_username,$res_age);
// mysqli_stmt_fetch($stmt);
// printf('我的编号为:'.$res_id.'--我的名字为:'.$res_username.'--我的年龄为:'.$res_age);
while(mysqli_stmt_fetch($stmt)){
printf('我的编号为:'.$res_id.'--我的名字为:'.$res_username.'--我的年龄为:'.$res_age);
echo '<hr/>';
}
echo '<hr color="red"/>';

}
  • mysqli_stmt_data_seek
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
require_once 'conn.php';
$sql="SELECT id,username,age FROM user WHERE id<=30";
if($stmt=mysqli_prepare($link, $sql)){
mysqli_execute($stmt);
mysqli_stmt_store_result($stmt);
echo '受影响的记录条数为:'.mysqli_stmt_affected_rows($stmt).'<br/>';
echo '结果集中的记录条数为:'.mysqli_stmt_num_rows($stmt).'<br/>';
mysqli_stmt_bind_result($stmt,$id,$username,$age);
while(mysqli_stmt_fetch($stmt)){
echo '编号:'.$id.'--'.'用户名:'.$username.'--年龄:'.$age."<hr/>";
}
echo '<hr color="red"/>';
mysqli_stmt_data_seek($stmt, 1);
mysqli_stmt_bind_result($stmt,$id,$username,$age);
mysqli_stmt_fetch($stmt);
echo '编号:'.$id.'--'.'用户名:'.$username.'--年龄:'.$age."<hr/>";
}
  • mysqli_commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
require_once 'conn.php';
//关闭自动提交
mysqli_autocommit($link, FALSE);
$sql="UPDATE account SET money=money-2000 WHERE username='maizi'";
$res=mysqli_query($link, $sql);

$sql='UPDATE account123 SET money=money+2000 WHERE username="king"';
$res1=mysqli_query($link,$sql);
if($res && $res1){
mysqli_commit($link);//提交
mysqli_autocommit($link, TRUE);
}else{
mysqli_rollback($link);//回滚
}
  • reg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<h3>注册页面</h3>
<form action="doAction.php?act=reg" method='post'>
<table border='1' width='80%' cellpadding='0' cellspacing='0' bgcolor='#ABCDEF' >
<tr>
<td>用户名</td>
<td><input type="text" name="username" id="" placeholder='请输入合法用户名'/></td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" name="password" id="" placeholder='密码不能为空' /></td>
</tr>
<tr>
<td colspan='2'>
<input type="submit" value="注册" />
</td>
</tr>
</table>
</form>

</body>
</html>
  • testFunction
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
header('content-type:text/html;charset=utf-8');
require_once 'functions/mysql.func.php';
require_once 'config/config.php';
// $host='localhost';
// $user='root';
// $password='root';
// $charset='utf8';
// $database='test1';
// $link=connect1($host, $user, $password, $charset, $database);
// var_dump($link);
// $link=connect2($config);
// var_dump($link);
$link=connect3();
// var_dump($link);
// $array=[
// 'username'=>'queen1',
// 'password'=>md5('queen1'),
// 'age'=>22,
// 'regTime'=>time()
// ];
$table='user';
// if(insert($link, $array, $table)){
// echo '注册成功';
// }else{
// echo '注册失败';
// }
// $array=['age'=>'12'];
// // $res=update($link, $array, $table);
// $res=update($link,$array,$table,'id=2');
// if($res){
// echo '更新成功';
// }else{
// echo '更新失败';
// }

// $res=delete($link, $table,'id=3');
// if($res){
// echo '删除成功';
// }else{
// echo '删除失败';
// }
$query="SELECT id,username,age FROM user WHERE id=1";
$row=fetchOne($link, $query);
print_r($row);
echo '<hr/>';
$query="SELECT id,username,age FROM user WHERE id>=1";
$rows=fetchAll($link, $query);
print_r($rows);

echo '<hr/>';
echo getTotalRows($link,'user1');
释放结果集
关闭连接

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()
    • 作用
      • 将 MySQL 客户端库版本作为整数返回
    • 语法
      • int mysqli_get_client_version ( mysqli $link )
  • mysqli_get_server_info()
    • 作用
      • 返回MySQL服务器的版本号
    • 语法
      • string mysqli_get_server_info ( mysqli $link )
        mysqli_get_server_version()
    • 作用
      • 作为一个整数返回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
  • 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()
    • 作用
      • 执行一个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 )
坚持原创技术分享,您的支持将鼓励我继续创作!