代码审计—MySQLi基础

admin 2023年12月19日08:57:42评论22 views字数 5169阅读17分13秒阅读模式

PHP操作MySQL数据库

1、关于MySQLi

代码审计—MySQLi基础

MySQLi函数库是MySQL系统函数的增强版,它更稳定、高效、安全。它与MySQL函数库的应用基本类似,而且大部分函数的使用方法都一样,唯一的区别就是MySQLi函数库中的函数名称都是以mysqli开始的。

2、连接数据库

要想使用PHP操作MySQL数据库,首先要建立与MySQL数据库的连接。MySQLi扩展中,mysqli_connect()函数用于实现与MySQL数据库的连接,其语法格式如下:

连接数据库

mysqli_connect(主机IP,用户名,密码,数据库名,端口号) //如果端口号是3306可以省略

mysqli_connect_error():获取连接数据库的错误信息

mysqli_connect_errno():获取连接数据库的错误编码

mysqli_set_charset(连接对象,字符编码)

代码如下:

<?php//连接数据库,连接成功返回连接对象$link=@mysqli_connect('localhost','root','root','data','3306');//var_dump($link); //object(mysqli)if(mysqli_connect_error()){echo '错误号:'.mysqli_connect_errno(),'<br>'; //显示错误编码echo '错误信息:'.mysqli_connect_error(); //显示错误信息exit;}//设置字符编码mysqli_set_charset($link,'utf8');

除此之外,MySQLi扩展还提供了mysqli_select_db()函数用来选择MySQL数据库。其语法格式如下:

bool mysqli_select_db(mysqli link, string dbname)

<?php

   $host = "127.0.0.1";                                   //MySQL 服务器地址

   $userName = "root";                                    //用户名

   $password = "111";                                     //密码

   $dbName = "db_database18";                             //数据库名称

   $connID = mysqli_connect($host, $userName, $password); //建立与MySQL 数据库服务器的连接

   if (mysqli_select_db($connID, $dbName)) {  //选择数据库

        echo "数据库选择成功!";

   } else {

        echo "数据库选择失败!";

   }

?>

脚下留心:与数据库相关用utf8,与页面显示相关用utf-8

new mysqlimysqli_connect 两种方式:

在 PHP 中,你可以使用 new mysqlimysqli_connect 两种方式来连接 MySQL 数据库。这两种方法都是用于创建与 MySQL 数据库的连接对象,但它们有一些不同之处。下面是对它们的说明:

  1. new mysqli 构造函数:new mysqli 是通过实例化 mysqli 类来创建与数据库的连接对象。它的语法如下:

phpCopy code

$mysqli = new mysqli($host, $username, $password, $database, $port, $socket);

    • $host:数据库的主机名。
    • $username:数据库的用户名。
    • $password:数据库的密码。
    • $database:要连接的数据库名称。
    • $port(可选):数据库的端口号,默认为 3306
    • $socket(可选):数据库的 Unix 套接字文件路径。

    示例:

    phpCopy code

    $host = 'localhost'; $username = 'root'; $password = 'password'; $database = 'mydb'; $mysqli = new mysqli($host, $username, $password, $database);

    这种方式创建的连接对象是面向对象的,你可以使用 $mysqli 对象调用相关的方法进行数据库操作。

    1. mysqli_connect 函数:mysqli_connect 是一个函数,用于创建与 MySQL 数据库的连接。它的语法如下:

    phpCopy code

    $conn = mysqli_connect($host, $username, $password, $database, $port, $socket);

      • $host:数据库的主机名。
      • $username:数据库的用户名。
      • $password:数据库的密码。
      • $database:要连接的数据库名称。
      • $port(可选):数据库的端口号,默认为 3306
      • $socket(可选):数据库的 Unix 套接字文件路径。

      示例:

      phpCopy code

      $host = 'localhost'; $username = 'root'; $password = 'password'; $database = 'mydb'; $conn = mysqli_connect($host, $username, $password, $database);

      这种方式创建的连接对象是面向过程的,你可以使用 $conn 变量调用相关的函数进行数据库操作。

      无论你选择使用 new mysqli 还是 mysqli_connect,都能创建一个连接对象,可以用于执行查询、插入、更新和删除等操作。它们之间的选择通常取决于你的编程风格和偏好,以及具体的应用场景。

      3、操作数据

      要对数据库中的表进行操作,需要使用mysqli_query()函数。其语法格式如下:

      mysqli_query(mysqli link, string query [, int resultmode])

      ☑ link为必选参数,mysqli_connect()函数成功连接MySQL数据库服务器后所返回的连接标识。

      ☑ query为必选参数,所要执行的查询语句。

      ☑ resultmode为可选参数,该参数取值为MYSQLI_USE_RESULT和MYSQLI_STORE_RESULT。其中,MYSQLI_STORE_RESULT为该函数的默认值。如果返回大量数据,可以应用MYSQLI_USE_RESULT,但应用该值时,以后的查询调用可能返回一个commands out of sync错误,解决办法是应用mysqli_free_result()函数释放内存。

      如果SQL语句是查询指令select,成功则返回查询结果集,否则返回false;如果SQL语句是insert、delete、update等操作指令,成功则返回true,否则返回false。如果使用mysqli_query()函数执行select语句,如果成功,将返回查询结果集。

      创建news数据库

      -- 创建表drop table if exists news;create table news(      id int unsigned auto_increment primary key comment '主键',      title varchar(20) not null comment '标题',      content text not null comment '内容',      createtime int not null comment '添加时间')engine=innodb charset=utf8 comment '新闻表';-- 插入测试数据insert into news values (null,'锄禾','锄禾日当午',unix_timestamp());insert into news values (null,'草','离离原上草',unix_timestamp());

      代码审计—MySQLi基础

      思考:时间字段可以用datetime类型,也可以使用int类型。一般用int,因为datetime占用8个字节,int占用4个字节。

      1 数据操作语句

      通过mysqli_query()执行SQL语句,增、删、改语句执行成功返回true,失败返回false

      <?php//1、连接数据库$link=mysqli_connect('localhost','root','123456','phpbc');//2、设置字符编码mysqli_set_charset($link,'utf8');//3、执行SQL语句//3.1 执行insert语句/*$rs=mysqli_query($link,"insert into news values (null,'静夜思','床前明月光',unix_timestamp())");if($rs)echo '自动增长的编号是:'.mysqli_insert_id($link);*///3.2 执行update语句/*$rs=mysqli_query($link,"update news set content='疑是地上霜' where id=4");if($rs)echo '受影响的记录数是:'.mysqli_affected_rows($link);else{echo '错误码:'.mysqli_errno($link),'<br>';echo '错误信息:'.mysqli_error($link);}*///3.3 执行delete语句mysqli_query($link,"delete from news where id=5");
      
      用到的函数
      
      mysqli_query():执行SQL语句mysqli_insert_id():获取插入记录自动增长的IDmysqli_affected_rows():获取受影响的记录数mysqli_error():获取执行SQL语句的错误信息mysqli_errno():获取执行SQL语句的错误码

      2、数据查询语句

      数据查询用select、desc、show,成功会返回结果集,失败返回false

      <?php//1、连接数据库$link=@mysqli_connect('localhost','root','123456','phpbc') or die('错误信息:'.mysqli_connect_error());//2、设置字符编码mysqli_query($link,'set names utf8');//3、执行查询语句$rs=mysqli_query($link,'select * from news');//var_dump($rs); //object(mysqli_result)//4、获取对象中的数据//4.1 将对象中的一条数据匹配成索引数组,指针下移一条//$rows=mysqli_fetch_row($rs);//4.2 将对象中的一条数据匹配成关联数组,指针下移一条//$rows=mysqli_fetch_assoc($rs);//4.3 将对象中的一条数据匹配成索引,关联数组,指针下移一条//$rows=mysqli_fetch_array($rs);//4.4 总列数、总行数//echo '总行数'.mysqli_num_rows($rs),'<br>';//echo '总列数'.mysqli_num_fields($rs),'<br>';//4.5 获取所有数据//$list=mysqli_fetch_all($rs); //默认是索引数组//$list=mysqli_fetch_all($rs,MYSQLI_NUM); //匹配成索引数组//$list=mysqli_fetch_all($rs,MYSQLI_ASSOC); //匹配成关联数组$list=mysqli_fetch_all($rs,MYSQLI_BOTH); //匹配成关联、索引数组echo '<pre>';print_r($list);//5、销毁结果集mysqli_free_result($rs);//6、关闭连接mysqli_close($link);
      
      使用的函数
      
      mysqli_fetch_assoc():将一条数组匹配关联数组mysqli_fetch_row():将一条记录匹配成索引数组mysqli_fetch_array():将一条记录匹配成既有关联数组又有索引数组mysqli_fetch_all():匹配所有记录mysqli_num_rows():总行数mysqli_num_fields():总记录数mysqli_free_result():销毁结果集mysqli_close():关闭连接

      至此,PHP操作MySQL数据库的方法已经学习大半,我们可以实现MySQL服务器的连接、选择数据库、执行查询语句,并且可以将查询结果集中的数据返回到数组中。下面编写一个实例,通过PHP操作MySQL数据库,读取数据库中存储的数据。

      4、WEB案例

      准备测试表和数据

      代码审计—MySQLi基础

      1、数据展示

      代码审计—MySQLi基础

      代码审计—MySQLi基础

      2、添加数据

      代码审计—MySQLi基础

      代码审计—MySQLi基础

      代码审计—MySQLi基础

      3、修改数据

      代码审计—MySQLi基础

      代码审计—MySQLi基础

      代码审计—MySQLi基础

      4、删除数据

      代码审计—MySQLi基础

      代码审计—MySQLi基础

      原文始发于微信公众号(贝雷帽SEC):代码审计—MySQLi基础

      • 左青龙
      • 微信扫一扫
      • weinxin
      • 右白虎
      • 微信扫一扫
      • weinxin
      admin
      • 本文由 发表于 2023年12月19日08:57:42
      • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                       代码审计—MySQLi基础http://cn-sec.com/archives/2314934.html

      发表评论

      匿名网友 填写信息