博主信息
王佳祥
博文
54
粉丝
3
评论
0
访问量
17377
积分:0
P豆:111.5

MySQLi扩展库

2020年07月16日 15:21:23阅读数:877博客 / 王佳祥/ php

MySQLi扩展库

一、MySQLi扩展库安装

1. 在php.ini文件中找到extension=mysqli去掉分号注释



2. 在php.ini文件中查看extension_dir目录是否正确



3.检测MySQLi扩展库是否已经安装成功

  • phpinfo();函数显示php所有配置信息


  • var_dump(extension_loaded('mysqli'));返回true加载成功,否则加载失败


  • var_dump(get_loaded_extensions());返回所有加载项


  • var_dump(function_exists('mysqli_connect'));检查指定的函数是否已经定义


二、mysqli类

1.mysqli类

  1. mysqli类的对象主要控制PHPMYSQL数据库服务器之间的连接,数据库选择,发送SQL语句,以及设置字符集。

2.连接数据库

$mysql = new mysqli('localhost','用户名','密码','数据库名');

  1. //建立mysql连接,并且打开指定数据库
  2. $mysql = @new mysqli('localhost','root','wang1111','tp5');
  3. print_r($mysql);


3.异常错误处理

  • connect_errno 返回最后一次的错误代码

  • connect_error 返回最后一次的错误信息描述

  • errno 返回最近一次的错误代码

  • error 返回最近一次的错误信息描述

  • die(); 函数输出一条消息,并退出当前脚本

  • @ PHP中用作错误控制操作符,可以忽略错误信息

  1. //如果数据库账号密码不对的话,就返回错误信息
  2. if($mysqli->connect_errno){
  3. //如果存在连接错误
  4. //connect_errno返回最后一次的错误代码
  5. die("CONNECT_ERROR:".$mysqli->connect_error);
  6. //die() 函数输出一条消息,并退出当前脚本
  7. //connect_error返回最后一次的错误信息描述
  8. }


4.sql语句执行

  • $mysqli::set_charset() 设置默认的客户端字符集

  • $mysqli::query() 在数据库内执行查询

    1. 失败返回false,成功执行SELECT, SHOW, DESCRIBE EXPLAIN查询会返回一个mysqli_result 对象,其他查询则返回TRUE
  • $multi_query() 执行多条SQL语句的查询

    1. 第一条语句执行成功返回true,否则返回false,并且后面的sql语句都不会执行成功
  • $mysqli::prepare() )准备(prepare)需要执行的 SQL 语句

    1. mysqli_prepare() 返回一个 statement 对象,如果发生错误则返回 FALSE
  • $mysqli::insert_id 返回上次查询中所自动生成的 ID

  • $mysqli::close() 关闭先前打开的数据库连接

  • 更新数据

  1. //- 更新一条数据
  2. $mysql = new mysqli('localhost','root','wang1111','tp5');
  3. if($mysql->connect_errno){
  4. die("CONNECT_ERROR:".$mysql->connect_error);
  5. }
  6. $mysql->set_charset('utf8');
  7. $sql = "UPDATE staff SET name='孙悟空' WHERE name='郭靖'";
  8. $res = $mysql->query($sql);
  9. var_dump($res);


  • 插入数据
  1. //插入一条数据
  2. $sql = "INSERT INTO user(`username`,`password`) VALUES ('Timo','Timo')";
  3. //反引号``防止和关键字冲突
  4. $res = $mysql->query($sql);
  5. if($res){
  6. echo "恭喜注册成功,您是本站的第".$mysql->insert_id."位用户";
  7. //$mysqli::insert_id返回上次查询中所自动生成的 ID
  8. }


  • 删除数据
  1. //删除数据
  2. $sql = "DELETE FROM `user` WHERE `id` >=5";
  3. $res = $mysql->query($sql);
  4. if($res){
  5. echo $mysql->affected_rows.'条记录受影响<br>';
  6. }else{
  7. echo "ERROE:".$mysql->errno.":".$mysql->error;
  8. }


  • 查询数据
  1. //查询操作
  2. /* 失败时返回 FALSE, 通过mysqli_query()
  3. 成功执行SELECT, SHOW, DESCRIBE或 EXPLAIN
  4. 查询会返回一个mysqli_result 对象,其他查询则返回TRUE。 */
  5. $sql = "SELECT `username`,`password` FROM `user`";
  6. $res = $mysql->query($sql);
  7. var_dump($res);
  8. $mysql->close();//关闭先前打开的数据库连接


三、mysqli_result类

1.mysqli_result类

  1. 这个类的对象包含SELECT查询的结果、获取结果集中数据的成员方法,以及和查询的结果有关的成员属性。

2.mysqli_result::fetch_all() 抓取所有的结果行并且以关联数组,数值索引数组,或者两者皆有的方式返回结果集。

  1. $sql = "SELECT `username`,`password` FROM `user`";
  2. $res = $mysql->query($sql);
  3. $a = $res->fetch_all();
  4. print_r($a);
  5. /* mysqli_result::fetch_all()抓取所有的结果行并且以关联数组,
  6. 数值索引数组,或者两者皆有的方式返回结果集 */


3.mysqli_result::fetch_array() 以一个关联数组,数值索引数组,或者两者皆有的方式抓取一行结果

  1. $sql = "SELECT `username`,`password` FROM `user`";
  2. $res = $mysql->query($sql);
  3. $a = $res->fetch_array();
  4. print_r($a);


4.mysqli_result::fetch_assoc() 以一个关联数组方式抓取一行结果

  1. $sql = "SELECT `username`,`password` FROM `user`";
  2. $res = $mysql->query($sql);
  3. $a = $res->fetch_assoc();
  4. print_r($a)


5.mysqli_result::fetch_row() 以一个枚举数组方式返回一行结果

  1. $sql = "SELECT `username`,`password` FROM `user`";
  2. $res = $mysql->query($sql);
  3. $a = $res->fetch_row();
  4. print_r($a)


6.$mysqli_result::num_rows 获取结果中行的数量

  1. $sql = "SELECT `username`,`password` FROM `user`";
  2. $res = $mysql->query($sql);
  3. $a = $res->num_rows;
  4. print_r($a)


7.mysqli_result::free() 释放与一个结果集相关的内存

  1. $sql = "SELECT `username`,`password` FROM `user`";
  2. $res = $mysql->query($sql);
  3. $a = $res->num_rows;
  4. var_dump($a);
  5. echo '<hr>';
  6. $b = $res->free();
  7. var_dump($b);


四、mysqli_stmt类

1.mysqli_stmt类(预处理机制)

  1. mysqli_stmt类的对象可以定义和执行参数化的SQL命令,即预处理(Prepared Statement)的机制。

2.mysqli_stmt::bind_param() 绑定变量参数到 prepared 语句

  1. //mysql预处理机制,防止sql注入
  2. //1.建立到mysql的连接,并且打开指定的数据库
  3. $mysqli = new mysqli('localhost','root','wang1111','tp5');
  4. if($mysqli->connect_errno){
  5. die("CONNECT_ERROR:".$mysqli->connect_error);
  6. }
  7. //2.设置字符集
  8. $mysqli->set_charset('utf-8');
  9. $sql = "INSERT INTO `user`(`username`,`password`,`age`) VALUES(?,?,?)";
  10. //准备需要执行的SQL语句
  11. //返回一个statement对象,如果发生错误返回false
  12. $stmt = $mysqli->prepare($sql);
  13. //var_dump($res);
  14. //bing_param()绑定变量参数到prepared语句
  15. $username = 'php.cn';
  16. $password = md5('php.cn');
  17. $age = 12;
  18. $stmt->bind_param('ssi',$username,$password,$age);
  19. var_dump($stmt);


3.mysqli_stmt::execute() 执行 prepared 查询

  1. //执行预处理语句execute()
  2. $a = $stmt->execute();
  3. var_dump($a);


五、实战练习(表单)

1.防sql注入

  • demo3.php
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>实战练习</title>
  7. <style>
  8. body{
  9. margin:0;
  10. padding: 0;
  11. box-sizing: border-box;
  12. background-color: gainsboro;
  13. display:flex;
  14. justify-content: center;
  15. align-items: center;
  16. }
  17. .content{
  18. width: 500px;
  19. height: 300px;
  20. border-radius: 10px;
  21. box-shadow: 0 0 5px #888;
  22. background-color: #fff;
  23. position:absolute;
  24. top:30%;
  25. padding:10px;
  26. }
  27. </style>
  28. </head>
  29. <body>
  30. <table class="content">
  31. <form action="enter.php" method="post">
  32. <tr>
  33. <td><label for="username">账号:</label></td>
  34. <td><input type="text" name="username" id="username"></td>
  35. </tr>
  36. <tr>
  37. <td><label for="password">密码:</label></td>
  38. <td><input type="password" name="password" id="password"></td>
  39. </tr>
  40. <tr>
  41. <td colspan="2"><input type="submit" name="sub" value="提交"></td>
  42. </tr>
  43. </form>
  44. </table>
  45. </body>
  46. </html>
  • enter.php
  1. <?php
  2. //数据接收
  3. $username = $_POST['username'];
  4. $password = $_POST['password'];
  5. //连接数据库
  6. $mysqli = @new mysqli('localhost','root','wang1111','tp5');
  7. if($mysqli->connect_errno){
  8. die("CONNECT_ERROR:".$mysqli->connect_error);
  9. }
  10. $mysqli->set_charset('utf-8');
  11. //mysqli_stmt类的对象可以定义和执行参数化的SQL命令,即预处理
  12. //使用问号参数占位符来构成预处理sql语句
  13. $sql = "SELECT * FROM `user` WHERE `username` = ? AND `password` = ?";
  14. //$res = $mysqli->query($sql);
  15. //var_dump($res);
  16. $stmt = $mysqli->prepare($sql);
  17. $stmt->bind_param('ss',$username,$password);
  18. $stmt->execute();
  19. //get_result()获取结果
  20. $res = $stmt->get_result();
  21. print_r($res->num_rows);




2.不用sql注入

  1. <?php
  2. //数据接收
  3. $username = $_POST['username'];
  4. $password = $_POST['password'];
  5. //连接数据库
  6. $mysqli = @new mysqli('localhost','root','wang1111','tp5');
  7. if($mysqli->connect_errno){
  8. die("CONNECT_ERROR:".$mysqli->connect_error);
  9. }
  10. $mysqli->set_charset('utf-8');
  11. //mysqli_stmt类的对象可以定义和执行参数化的SQL命令,即预处理
  12. //使用问号参数占位符来构成预处理sql语句
  13. $sql = "SELECT * FROM `user` WHERE `username` = '{$username}' AND `password` = '{$password}'";
  14. $res = $mysqli->query($sql);
  15. print_r($res->num_rows);




六、学习总结:

1.mysqli类

函数名 描述
affected_rows 获取上次mysql操作受影响的行数
connect_errno 返回最后一次连接数据库的错误代码
connect_error 返回最后一次连接数据库的错误描述,类型为字符串
errno 返回最近一次函数调用所产生的错误代码
error 返回最近一次错误代码的描述,类型是字符串
set_charset() 设置默认的客户端字符集
select_db() 为数据库查询设置默认数据库
query() 在数据库内执行查询
multi_query() 执行多条SQL语句的查询,第一条语句执行成功返回true,否则返回false
prepare() 准备(prepare)需要执行的 SQL 语句,返回一个 statement 对象
insert_id 返回上次查询中所自动生成的 ID
mysqli::close() 关闭先前打开的数据库连接

2.mysqli_result类

函数名 描述
fetch_all() 抓取所有的结果行并且以关联数组,数值索引数组,或者两者皆有的方式返回结果集
fetch_array() 以一个关联数组,数值索引数组,或者两者皆有的方式抓取一行结果
fetch_assoc() 以一个关联数组方式抓取一行结果
fetch_row() 以一个枚举数组方式返回一行结果
num_rows 获取结果中行的数量
free() 释放与一个结果集相关的内存

3.mysqli_stmt类

函数名 描述
affected_rows 返回受上次执行语句影响的总行数
num_rows 返回语句结果集中的行数
errno 返回最近一次语句调用的错误代码
error 返回最后一条语句错误的字符串描述
prepare() 准备执行 SQL 语句
bind_param() 绑定变量参数到 prepared 语句
bind_result() 绑定变量参数到 prepared 语句,用于结果存储
execute() 执行 prepared 查询
get_result() 获取 prepared 语句中的结果
fetch() 获取 prepared 语句中的结果, 返回true,否则返回false
free_result() 释放给定语句处理存储的结果集所占内存

4.遍历结果集

  1. <?php
  2. //连接数据库
  3. $localhost = 'localhost';
  4. $username = 'root';
  5. $password = 'wang1111';
  6. $database = 'tp5';
  7. $mysqli = new mysqli($localhost,$username,$password,$database);
  8. //判断数据库连接是否正确
  9. if($mysqli->connect_error){
  10. die("CONNECT_ERROR:".$mysqli->error);
  11. }
  12. //查询数据库staff表的所有内容
  13. $sql = "SELECT * FROM `user`";
  14. //执行sql语句,并将结果集赋值给$res变量
  15. $res = $mysqli->query($sql);
  16. //遍历$res结果集
  17. foreach($res as $value){
  18. echo $value['id'].'|'.$value['username'].'|'.$value['password'].'|'.$value['age'].'<br>';
  19. }
  20. //释放资源,关闭数据库连接
  21. $mysqli->free;
  22. $mysqli->close();


批改老师:GuanhuiGuanhui

批改状态:合格

老师批语:写的很好,前面学的前端也没忘,不过一定要多练,学会数据库操作可以写很多东西了,可以发挥想象试着写一些功能。

版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论
  • 本文介绍借助PHP Mysqli实现MySQL数据交互。
    PHP安装“mysqli的方法:首先下载“mysqli,并使用“phpize”工具初始化;然后执行“make”命令将“mysqli进行编译安装;接着在配置文件中开启“mysqli
    使用php mysqli操作mysql数据,是mysql的增强版,效率、安全有所提高,支持面向对象编程,同时也提供了面向过程的编程风格。
    linux php增加mysqli的方法:1、找到php安装包下的ext目录下的mysqli;2、在mysqli目录下直接运行phpize;3、在php.ini的最后一行加上“mysqli.so
    php安装mysqli的方法:1、找到ext目录下的mysqli;2、执行【/usr/local/php7.2/bin/phpize】命令;3、执行【make && make install
    php7安装mysqli的方法:1、找到ext目录下的mysqli,执行phpize命令;2、在mysqli文件夹下执行【./configure】命令;3、执行【make install】命令。
    在php中,我们时常会用到mysqli,今天我们就来给大家介绍一下如何在php7中使用mysqli,有需要的小伙伴可以参考参考。
    下面由phpmyadmin使用教程栏目给大家介绍phpmyadmin中缺少mysqli问题的解决方法,希望对需要的朋友有所帮助!phpMyAdmin错误 缺少 mysqli
    php开启mysqli的方法:首先打开php.ini配置文件;然后找到【extension=php_mysqli.dll】,并取消注释;最后找到【extension_dir】,设置ext路径即可。
    php安装mysqli的方法是:1、找到ext目录下的mysqli目录,执行【/usr/local/php7.2/bin/phpize】命令;2、配置系统环境;3、执行【make &&
    这篇文章主要介绍了Thinkphp 框架之类操作,结合实例形式分析了Thinkphp 类的相关原理、实现方法与操作注意事项,需要的朋友可以参考下。
    php安装uuid的方法:首先到PECL官网下载php uuid;然后安装好依赖;接着使用phpize命令准备PHP的编译环境;最后通过install命令进行安装即可。
    php7 yaf的安装方法:1、下载yaf源码安装包;2、下载yaf源码安装包;3、解压yafyaf包;4、生成编译configure配置文件;5、执行配置文件;6、编译并安装;7、
    php编译后没有的解决方法是,首先进入php的源代码目录,执行编译安装命令。然后在php.ini配置文件中添加pdo_mysql.so。最后执行重启命令即可。
    php7安装yaf的方法:1、在官网下载yaf源码安装包,并解压;2、生成编译configure配置文件;3、执行配置文件,编译并安装;4、引用,重启php-fpm。
    ubuntu安装php包的方法:首先打开命令窗口;然后通过“apt-get install”命令安装需要的php;最后通过“php -m”命令查看安装的包。
    php mysqli查询数据的方法:首先通过mysqli生成一个连接;然后通过select语句获取查询结果;最后通过while循环取出记录即可。
    php zlib安装方法:首先进入源码目录;然后生成编译配置文件;接着下载并安装zlib;最后重新生成配置即可。
    本文介绍通过PDO与MySQL数据交互实现基本使用。
    2007版本以前的access文件名是【mdb】;2007版本以后的access文件名是【accdb】。