【15】WEB安全学习----PHP操作MYSQL

一、MySQLi扩展

MySQLi扩展比MySQL扩展的优势:

1、基于面向对象和面向过程的使用

2、支持预处理语句(防止SQL注入)

3、支持事务处理

二、MySQLi面向对象使用

MySQLi类中常用方法:

mysqli::set_charset:  bool mysqli::set_charset ( string $charset )  设置默认字符编码

mysqli::select_db:  bool mysqli::select_db ( string $dbname )    选择用于数据库查询的默认数据库

mysqli::query: mixed mysqli::query ( string $query [, int $resultmode = MYSQLI_STORE_RESULT ] )   对数据库执行一次查询

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

mysqli::$connect_errno:返回上次连接调用的错误代码

mysqli::$connect_error:返回上次连接错误的字符串描述

mysqli::$errno:返回上一个错判的字符串描述

mysqli_result类常用方法:

mysqli_result::fetch_assoc:  array mysqli_result::fetch_assoc ( void )  获取结果行作为关联数组

mysqli_result::fetch_all:mixed mysqli_result::fetch_all ([ int $resulttype = MYSQLI_NUM ] )   将所有结果行提取为关联数组,数字数组或两者

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

1、MySQLi-增删改使用

<?php
header('content-type:text/html;charset=utf-8');
//实例化mysqli对象
$mysqli=new mysqli();
//连接MySQL数据库
$mysqli->connect('localhost','root','root');
if($mysqli->connect_errno){ //数据库连接错误号
    die('连接数据库失败:'.$mysqli->connect_error); //数据库连接错误信息
}
$mysqli->select_db('user');  //选择数据库
if($mysqli->errno){
    die('打开数据库失败:'.$mysqli->error);
}
$mysqli->set_charset('utf8');  //设置编码格式
$sql='INSERT INTO users VALUES(NULL,"wang",md5("admin123"),5);';
$result=$mysqli->query($sql);  //执行SQL语句

var_dump($result);  //如果执行INSERT、DELECT、DROP等语句返回True或False
//如果执行的是SELECT操作,则返回资源集

if(!$result){
    echo '执行SQL语句失败:'.$mysqli->error;
}else {
    echo '执行SQL语句成功';
}
$mysqli->close();  //关闭数据库连接

2、MySQLi-查询使用

当前users表中的数据:

<?php
header('content-type:text/html;charset=utf-8');
//实例化mysqli对象
$mysqli=new mysqli();
//连接MySQL数据库
$mysqli->connect('localhost','root','root');
if($mysqli->connect_errno){ //数据库连接错误号
    die('连接数据库失败:'.$mysqli->connect_error); //数据库连接错误信息
}
$mysqli->select_db('user');  //选择数据库
if($mysqli->errno){
    die('打开数据库失败:'.$mysqli->error);
}
$mysqli->set_charset('utf8');  //设置编码格式
$sql='SELECT * FROM users;';
$result=$mysqli->query($sql);  //执行SQL语句
if(!$result){  //如果执行SELECT查询操作,执行失败返回False,成功返回mysqli_result对象
    echo '执行SQL语句失败';
}else if($result->num_rows==0){  //获取查询结果的行数
    echo '查询结果行数为0';
}else {
    $array1=$result->fetch_all();  //将所有结果行提取数字数组
    print_r($array1);
    /*
    Array
(
    [0] => Array
        (
            [0] => 1
            [1] => Root
            [2] => e10adc3949ba59abbe56e057f20f883e
            [3] => 1
        )
    */
    $array1=$result->fetch_all(MYSQLI_ASSOC);  //将所有结果行提取为关联数组
    print_r($array1);
    /* 
    Array
(
    [0] => Array
        (
            [id] => 1
            [username] => Root
            [passwd] => e10adc3949ba59abbe56e057f20f883e
            [parid] => 1
        )

    */
    $array1=$result->fetch_all(MYSQLI_ASSOC);
    foreach($array1 as $key=>$value){
        echo '用户名:'.$value['username'].'密码:'.$value['passwd'].'<br />';
        /*
    用户名:Root密码:e10adc3949ba59abbe56e057f20f883e
    用户名:Admin密码:21232f297a57a5a743894a0e4a801fc3
    用户名:SYS密码:3fde6bb0541387e4ebdadf7c2ff31123
    用户名:Guest密码:f6fdffe48c908deb0f4c3bd36c032e72
    用户名:wang密码:0192023a7bbd73250516f069df18b500
        */
        $array1->free();  //释放结果集
    }
}

$mysqli->close();  //关闭数据库连接

3、MySQL预处理

mysqli::prepare:准备执行一个 SQL 语句,返回一个语句句柄MySQLi_STMT类,可以对这个句柄进行后续的操作。 这里仅仅支持单一的 SQL 语句,不支持多 SQL 语句。

mysqli_stmt_bind_param:将变量绑定到预准备语句作为参数

mysqli_stmt_execute​​​​​​​:执行准备好的查询

mysqli_stmt::bind_result:将变量绑定到结果存储的预准备语句

mysqli_stmt::fetch:将准备好的语句中的结果提取到绑定变量中

mysqli_stmt::free_result:释放给定语句句柄的存储结果内存

mysqli_stmt::close:关闭准备好的语句

<?php
header('content-type:text/html;charset=utf-8');
$id=$_GET['id'];
$mysqli=new mysqli();
$mysqli->connect('localhost','root','root');
if($mysqli->connect_errno){
    die('数据库链接失败:'.$mysqli->connect_error);
}
$mysqli->select_db('user');
if($mysqli->errno){
    die('打开数据库失败:'.$mysqli->error);
}
$mysqli->set_charset('utf8');
$sql='SELECT id,username,passwd FROM users WHERE id=?';  //预编译使用?号进行占位
$stmt=$mysqli->prepare($sql); //准备执行一个SQL,返回stmt类
$stmt->bind_param('i',$id);  //绑定变量    i:整数 s:字符串
if($stmt->execute()){  //执行sql语句
    $stmt->bind_result($id,$username,$passwd);  //将变量绑定到结果存储中
    while($stmt->fetch()){  //将结果提取到变量中
        echo 'ID:'.$id.'<br />';
        echo '用户名:'.$username.'<br />';
        echo '密码:'.$passwd.'<br />';
        echo '<hr />';
    }
}
$stmt->free_result();  //释放结果集
$stmt->close();
$mysqli->close();

猜你喜欢

转载自blog.csdn.net/a15803617402/article/details/82744329
今日推荐