简单实例

  • 面向过程方式

    // 创建数据库连接
    $connect = mysqli_connect('127.0.0.1', 'root', 'root', 'test', 8889);
    // 判读是否连接成功了
    if (!$connect) {
    echo '数据库连接失败<br>';
    // 打印连接失败的原因
    var_dump(mysqli_connect_error($connect));
    exit();
    }
    // 设置字符集
    mysqli_set_charset($connect, 'utf8');
    // 组装sql语句
    $sql = "SHOW TABLES";
    // 执行sql语句
    $res = mysqli_query($connect, $sql);
    // 获取结果
    $res_array = mysqli_fetch_all($res);
    var_dump($res_array);
    mysqli_close($connect);
    // 输出结果:
    array (size=2)
    0 =>
    array (size=1)
    0 => string 'family' (length=6)
    1 =>
    array (size=1)
    0 => string 'person' (length=6)
  • 面向对象方式

    // 创建数据库连接对象
    $connect = new mysqli('127.0.0.1', 'root', 'root', 'test', 8889);
    // 判断是否连接成功
    if ($connect->connect_errno) { // 发生错误时,$connect->connect_errno会返回对应的错误码
    echo '数据库连接失败<br>';
    // 打印错误信息
    var_dump($connect->connect_error);
    }
    // 设置字符集
    $connect->set_charset('utf8');
    // 组装sql语句
    $sql = "SHOW TABLES";
    // 执行sql语句
    $res = $connect->query($sql);
    // 获取结果集
    $data = $res->fetch_all();
    // 关闭连接
    $connect->close();

mysqli详解

1. 连接数据库

连接数据库有两种方式,一种是通过mysqli_connect()帮助函数,另一种是通过new mysqli()对象来实现

两者所需传的参数同样都是这些(注意先后顺序):

  • host 数据库地址

    数据库地址可以传入域名或ip地址,如localhost或者127.0.0.1

  • username 管理用户名

    管理员账号,如: root

  • password 管理员密码

    管理员账号的密码

  • dtabases 要连接的数据

    选择要连接的数据库

  • port 端口号

    该参数如果不传,默认请求3306端口

2. 设置字符集

  • 使用mysqli_set_charset($connect, 'utf8');函数设置

第一个参数为mysqli的对象,第二个参数为需要设置的字符集,注意mysql的字符集中的utf8没有中间的-

  • 使用面向对象的方式创建
$connect = new mysqli('127.0.0.1', 'root', 'root', 'test', 8889);
$connect->set_charset('utf8');
// 或者
$connect = mysqli_connect('127.0.0.1', 'root', 'root', 'test', 8889);
$connect->set_charset('utf8'); # 都可以这么使用

3. 执行sql语句

通过mysqli_query()进行执行SELECT, SHOW, DESCRIBEEXPLAIN,失败时返回false

$sql = "SHOW TABLES";

$res = $connect->query($sql); # 或者 mysqli_query($connect, $sql);

打印一下他返回了什么

var_dump($res);
object(mysqli_result)[2]
public 'current_field' => int 0
public 'field_count' => int 1
public 'lengths' => null
public 'num_rows' => int 2 # 返回了几条数据
public 'type' => int 0

4. 获取结果

通过mysqli_query()执行的sql语句之后如何获取结果呢?可以通过mysqli_fetch_array()mysqli_fetch_assoc()mysqli_fetch_all()mysqli_fetch_row()等进行获取结果

当需要获取一条数据的时候可以使用mysqli_fetch_row()

  • mysqli_fetch_array()

    该函数的第一个参数是通过mysqli_query()返回的对象

    第二个参数是获取结果的类型:

    MYSQLI_ASSOC 关联数组 同mysqli_fetch_assoc()函数

    MYSQLI_NUM 数字数组

    MYSQLI_BOTH默认。同时产生关联和数字数组

    # MYSQLI_BOTH 默认情况
    $sql = "SHOW TABLES";
    $res = $connect->query($sql);
    $data = $res->fetch_array(); # 或者 mysqli_fetch_array($res)
    var_dump($data);
    # 输出结果
    array (size=2)
    0 => string 'family' (length=6)
    'Tables_in_test' => string 'family' (length=6)
    # MYSQLI_ASSOC 获取关联数组
    $sql = "SHOW TABLES";
    $res = $connect->query($sql);
    $data = $res->fetch_array(MYSQLI_ASSOC); # 或者 mysqli_fetch_array($res, MYSQLI_ASSOC)
    var_dump($data);
    # 输出结果
    array (size=1)
    'Tables_in_test' => string 'family' (length=6)
    # MYSQLI_NUM 获取关联数组
    $sql = "SHOW TABLES";
    $res = $connect->query($sql);
    $data = $res->fetch_array(MYSQLI_NUM); # 或者 mysqli_fetch_array($res, MYSQLI_NUM)
    var_dump($data);
    # 输出结果
    array (size=1)
    0 => string 'family' (length=6)
  • mysqli_fetch_assoc()

    该函数与mysqli_fetch_array第二个参数传递MYSQLI_ASSOC的结果是一样的

    $sql = "SHOW TABLES";
    $res = $connect->query($sql);
    $data = $res->fetch_assoc(); # 或者 mysqli_fetch_assoc($res)
    # 输出结果
    array (size=1)
    'Tables_in_test' => string 'family' (length=6)
  • mysqli_fetch_all

    mysqli_fetch_array一样,只不过他的默认获取是数字索引数组

    $sql = "SHOW TABLES";
    $res = $connect->query($sql);
    $data = $res->fetch_all(); # 或者 mysqli_fetch_all($res)
    # 输出结果
    array (size=2)
    0 =>
    array (size=1)
    0 => string 'family' (length=6)
    1 =>
    array (size=1)
    0 => string 'person' (length=6)
  • mysqli_fetch_row

    获取一条数据

    $sql = "SHOW TABLES";
    $res = $connect->query($sql);
    $data = $res->fetch_row(); # 或者 mysqli_fetch_row($res)
    # 输出结果
    array (size=1)
    0 => string 'family' (length=6)

5. 关闭连接

mysqli_close($connect);
// 或者
$connect->close();

mysqli的基本使用的更多相关文章

  1. 比Mysqli操作数据库更简便的方式 。PDO

    下面来说一下PDO 先画一张图来了解一下 mysqli是针对mysql这个数据库扩展的一个类 PDO是为了能访问更多数据库 如果出现程序需要访问其他数据库的话就可以用PDO来做 PDO数据访问抽象层1 ...

  2. PHP 数据库连接工具类(MySQLI函数包装)

    ====================mysql===================== <?php class mysql { private $mysqli; private $resu ...

  3. php mysqli mysqli_query() mysqli_real_query()

    2016年11月26日 15:22:27 星期六 场景: PHP从mysql中读取数据 1. 一次性读取所有数据返给PHP 2. 每次循环只读取一掉记录 数据量小的时候可以使用第一种方法, 数据量很大 ...

  4. mysqli操作数据库

    1 连接数据库:可以使用对象或函数来连接(我们这里主要用mysqli对象,附带着函数连接) //创建mysqli对象(也可以叫做资源句柄) $_mysqli = new mysqli(); //连接数 ...

  5. php的mysql\mysqli\PDO(二)mysqli

    原文链接:http://www.orlion.ga/1147/ mysqli有面向对象风格和面向过程风格,个人感觉还是用面向对象风格比较好(毕竟是面向对象) 1.mysqli::_construct( ...

  6. PHP使用mysqli扩展库实现增删改查(面向对象版)

    mysqli扩展库是mysql扩展库的改进版本,在mysql扩展库的基础上提高了稳定性和效率,mysqli扩展库有两套东西,一套就是面向过程的mysqli另一套是面向对象的mysqli.操作方式大体和 ...

  7. 解决 Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in

    转载 php 5个版本,5.2.5.3.5.4.5.5,怕跟不上时代,新的服务器直接上5.5,但是程序出现如下错误:Deprecated: mysql_connect(): The mysql ext ...

  8. PHP mysql与mysqli事务详解

    官方对PHP连接到MySQL数据库服务器的三种主要的API简介如下: http://php.net/manual/zh/mysqli.overview.php PHP mysql与mysqli事务详解 ...

  9. mysql、mysqli、PDO一句话概括比较

    mysql.mysqli.PDO一句话概括比较 1 mysql扩展 (注:原始的,较差) 2 mysqli扩展(面向过程式) (注:比上面多了更多功能) 3 mysqli扩展(面向对象式) (注:比上 ...

  10. mysqli链接数据库:面向对象

    $mysqli = new mysqli('localhost','root','123','test');//检查连接是否成功if (mysqli_connect_error()){ //注意mys ...

随机推荐

  1. Springboot 配置文件、隐私数据脱敏的最佳实践(原理+源码)

    大家好!我是小富- 这几天公司在排查内部数据账号泄漏,原因是发现某些实习生小可爱居然连带着账号.密码将源码私传到GitHub上,导致核心数据外漏,孩子还是没挨过社会毒打,这种事的后果可大可小. 说起这 ...

  2. Python实现多种SSH连接与文件传输

    Python实现SSH控制 使用Python进行基于口令认证的连接: 1 #加载paramiko包 2 import paramiko 3 #创建新的SSH对象 4 Client=paramiko.S ...

  3. C# 10 完整特性介绍

    前言 开头防杠:.NET 的基础库.语言.运行时团队从来都是相互独立各自更新的,.NET 6 在基础库.运行时上同样做了非常多的改进,不过本文仅仅介绍语言部分. 距离上次介绍 C# 10 的特性已经有 ...

  4. Docker部署netcore web实践

    1. 新建一个netcore的项目 2. 我们到项目的生成输出目录下,创建一个Dockerfile文件 3. 编辑Dockerfile文件 备注:红线圈住的地方,就是你生成的netcore的程序名称 ...

  5. Notes about multiboot usb creator

    U盘上的多系统启动工具,Windows上YUMI比较好,Ubuntu上MultiSystem用法复杂,unetbootin是另外一款,需要安装p7zip(apt-get install p7zip-f ...

  6. jd-gui或jad反编译工具bug

    文件1:A.class------------2020-09-01日版本 文件2:A.class------------2020-09-02日版本,代码内容有变动. bug出现条件:文件1或文件2同目 ...

  7. 使用Netcat实现通信和反弹Shell

    一.概述 nc全称为netcat,所做的就是在两台电脑之间建立链接,并返回两个数据流 可运行在TCP或者UDP模式,添加参数 -u 则调整为udP,默认为tcp -v 参数,详细输出 -n参数,net ...

  8. DVWA-全等级跨站请求伪造

    DVWA简介 DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法 ...

  9. Docker++:docker运行Tomcat后访问首页报404 (永久解决方式)

    docker运行Tomcat后访问首页报404 与 tomcat 版本有关. 解决方式如下: 1.查看防火墙问题 2.Tomcat 下如果有 webapps.dist 和 webapps 则需要进行合 ...

  10. Ajax 局部刷新 异步提交

    AJAX简介 局部刷新,异步提交. AJAX 不是新的编程语言,而是一种使用现有标准的新方法.它最大的有点就是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容. 浏览器朝后端发送请 ...