使用MySQLi操作数据库

建立和断开连接

创建一个mysqli的对象:

$_mysqli = new mysqli();

连接MySQL的主机、用户、密码、数据库

$_mysqli->connect('localhost','root','root','test');

创建带连接参数的mysqli对象

$_mysqli = new mysqli('localhost','root','root','test');

单独选择数据库

$_mysqli->select_db('mysql');

断开MySQL

$_mysqli->close();

面向对象的连接方式例子

<?php 
    //使用mysqli 对象 操作数据库

    //创建mysqli对象(资源句柄)
    $_mysqli = new mysqli();

    //连接数据库:主机名(IP)、账户、密码、数据库
    //mysqli_connect()函数(面向过程)==$_mysqli->connect()(面向对象)
    $_mysqli->connect('localhost','root','root','test');

    //断开MySQL mysqli_close() ==$_mysqli->close()
    $_mysqli->close();
 ?>

创建带连接参数的连接方式

<?php 
    $_mysqli = new mysqli('localhost','root','root','test');

    $_mysqli->close();
 ?>

单独选择数据库(不推荐)

<?php 
    $_mysqli = new mysqli('localhost','root','root','test');

    //如果上面没写明的话,单独选择一个数据库
    //这里选择的数据库会替代上面的数据库
    //一般情况下不推荐使用这种方法。
    $_mysqli->select_db('mysql');

    $_mysqli->close();
 ?>

处理连接错误

数据库连接错误

mysqli扩展包含有很多特性用来捕获错误信息,例如:mysqli_connect_errno()mysqli_connect_error()方法。

mysqli_connect_errno() :返回连接数据库返回的错误代号;
mysqli_connect_error() :返回连接数据库返回的错误代码及信息。

tips:@符号放在前面可以抑制错误信息。

<?php 
    @$_mysqli = new mysqli('localhost','root','root','test5');
    //当连接参数出现错误,导致连接失败的时候
    //$_mysqli这个对象就不会创建成功,也就没有资源句柄的功能
    //没有资源句柄的功能也就是没有调用mysqli下的方法和属性的权限。

    if(mysqli_connect_errno()){
        echo '数据库连接错误,错误信息:'.mysqli_connect_error();
        exit();
    }

    $_mysqli->close();
 ?>

数据库操作错误

errno:返回数据库操作时的错误代号;
error:返回数据库操作时的错误代码和信息

<?php 
    @$_mysqli = new mysqli('localhost','root','root','test');

    //数据库连接时发生的错误,因为是在连接成功前执行,所以无面向对象。
    if(mysqli_connect_errno()){
        echo '数据库连接错误,错误信息:'.mysqli_connect_error();
        exit();
    }

    $_mysqli->select_db('asdadad');

    //数据库操作时发生错误,因为是在连接之后执行,所以有面向对象和过程
    // $_mysqli->errno;
    // $_mysqli->error;
    if($_mysqli->errno){
        echo '数据库操作错误:'.$_mysqli->error;
    }


    $_mysqli->close();
 ?>

与数据库进行交互

大多数交互都与创建(Creation)、获取(Retrieval)、更新(Update)和删除(Deletion)任务有关,这些任务统称为CRUD。

获取数据

设置编码UTF8

$_mysqli->set_charset("utf8");

创建一句SQL查询语句

$_sql = "SELECT * FROM tg_user";

执行sql语句把结果集赋给变量

$_result = $_mysqli->query($_sql);

将结果集的第一行输出

print_r($_result->fetch_row());

释放查询内存

$_result->free();

普通获取数据例子:

<?php 
    @$_mysqli = new mysqli('localhost','root','root','test');

    //数据库连接时发生的错误,因为是在连接成功前执行,所以无面向对象。
    if(mysqli_connect_errno()){
        echo '数据库连接错误,错误信息:'.mysqli_connect_error();
        exit();
    }

    //设置编码
    $_mysqli->set_charset('utf8');

    //创建一句查询的SQL语句。
    $_sql = "SELECT * FROM user";

    //执行sql语句,把结果集赋给变量
    $_result = $_mysqli->query($_sql);

    //通过结果集取得第一行数据
    //fetch_row()返回的是一个数组,里面是第一条数据的集合
    print_r($_result->fetch_row());

    //运行一次,指针就向下移一条,要显示第二条就再运行一次。
    print_r($_result->fetch_row());

    //销毁结果集
    $_result->free();

    //关闭数据库
    $_mysqli->close();
 ?>

解析查询结果

使用索引数组和关联数组:

<?php 
    @$_mysqli = new mysqli('localhost','root','root','test');

    //数据库连接时发生的错误,因为是在连接成功前执行,所以无面向对象。
    if(mysqli_connect_errno()){
        echo '数据库连接错误,错误信息:'.mysqli_connect_error();
        exit();
    }

    //设置编码
    $_mysqli->set_charset('utf8');

    //创建一句查询的SQL语句。
    $_sql = "SELECT * FROM user";

    //执行sql语句,把结果集赋给变量
    $_result = $_mysqli->query($_sql);

    //使用索引数组取值
        // $_row = $_result->fetch_row();
        // echo $_row[2];

    //因为是数组,可以用遍历方法,因为默认是赋值,
    //需要加两个感叹号,让其变成布尔值。
    while (!!$_row = $_result->fetch_row()) {
        echo $_row[3].'<br/>';
    }

    //销毁结果集
    $_result->free();

    //关闭数据库
    $_mysqli->close();
 ?>

使用关联数组取值:
fetch_assoc()函数

<?php 
    @$_mysqli = new mysqli('localhost','root','root','test');

    //数据库连接时发生的错误,因为是在连接成功前执行,所以无面向对象。
    if(mysqli_connect_errno()){
        echo '数据库连接错误,错误信息:'.mysqli_connect_error();
        exit();
    }

    //设置编码
    $_mysqli->set_charset('utf8');

    //创建一句查询的SQL语句。
    $_sql = "SELECT * FROM user";

    //执行sql语句,把结果集赋给变量
    $_result = $_mysqli->query($_sql);

    $_assoc = $_result->fetch_assoc();
    echo $_assoc['username'];


    //遍历
    while(!!$_assoc = $_result->fetch_assoc()){
        echo $_assoc['username'];
    }


    $_result->free();

    //关闭数据库
    $_mysqli->close();
 ?>

使用索引+关联数组取值
fetch_array()函数

<?php 
    @$_mysqli = new mysqli('localhost','root','root','test');

    //数据库连接时发生的错误,因为是在连接成功前执行,所以无面向对象。
    if(mysqli_connect_errno()){
        echo '数据库连接错误,错误信息:'.mysqli_connect_error();
        exit();
    }

    //设置编码
    $_mysqli->set_charset('utf8');

    //创建一句查询的SQL语句。
    $_sql = "SELECT * FROM user";

    //执行sql语句,把结果集赋给变量
    $_result = $_mysqli->query($_sql);

    //索引+关联数组
    $_array = $_result->fetch_array();
        echo $_array[3];
        echo $_array['username'];

    //遍历也一样的    

    $_result->free();

    //关闭数据库
    $_mysqli->close();
 ?>

查询选择的行数和受影响的行数

选择的行数:num_rows(一般用于SELECT);
影响的行数:affected_rows(一般用于UPDATE和DELETION的影响查询);

<?php 
    @$_mysqli = new mysqli('localhost','root','root','test');

    //数据库连接时发生的错误,因为是在连接成功前执行,所以无面向对象。
    if(mysqli_connect_errno()){
        echo '数据库连接错误,错误信息:'.mysqli_connect_error();
        exit();
    }

    //设置编码
    $_mysqli->set_charset('utf8');

    //创建一句查询的SQL语句。
    $_sql = "SELECT * FROM user";

    //执行sql语句,把结果集赋给变量
    $_result = $_mysqli->query($_sql);

//查看选择了多少行
    echo $_result->num_rows;

    //查看影响了多少行
    echo $_mysqli->affected_rows;  

    $_result->free();

    //关闭数据库
    $_mysqli->close();
 ?>

移动指针的操作和获取字段

计算有多少条字段:field_count

echo $_result->field_count;

获取字段名称:fetch_field()

$_field = $_result->fetch_field();
echo $_field->name;

一次性取得所有字段

$_fields = $_result->fetch_fields();
//print_r($_fields);
//单独取出一条字段
//echo $_fiels[0]->name;

//遍历
foreach($_fileds as $_field){
    echo $_field->name.'<br/>';
}

执行数据库事务

事务(transcaction)是作为一整个单元的一组有序的数据库操作。
如果一组中的所有操作都成功,则认为事务成功,即使只有一个失败操作,事务也不成功。

如果所有操作成功完成,事务则提交(commit),其修改将作用于所有其他数据库进程,如果一个操作失败,则事务将回滚(roll back),该事务所有操作的影响都将取消。

用途:常用于金币支付,或者交易等出现交易失败时的事务操作。

MySQL必须是InnoDB或BDB引擎的一种。

注意:首先必须先关闭自动提交数据。

<?php 
    @$_mysqli = new mysqli('localhost','root','root','test');

    //数据库连接时发生的错误,因为是在连接成功前执行,所以无面向对象。
    if(mysqli_connect_errno()){
        echo '数据库连接错误,错误信息:'.mysqli_connect_error();
        exit();
    }

    //设置编码
    $_mysqli->set_charset('utf8');

//首先关闭自动提交(手动提交)
    $_mysqli->autocommit(false);


    //创建两个SQL语句。“.”号是连接语句的意思。
    $_sql ="UPDATE banka SET golden=golden-50 WHERE id=1;";
    $_sql .="UPDATE bankb SET golden=golden+50 WHERE id=1";

    //执行条SQL语句
    //只要两条sql语句都成功。就手动提交给数据库。
    //否则就回滚,撤销之前的无效操作。

    if($_mysqli->multi_query($_sql)){

        //通过影响的行数判断SQL是否成功执行
        //如果$_success是false,说明SQL语句有误,就执行回滚。
            // if($_mysql->affected_rows(==1)){
            //  $_success = true;
            // }else{
            //  $_success=false;
            // }

        //上面这一段的简化写法。意思:如果有影响,那就是true,否则就是false
        $_success = $_mysqli->affected_rows ==1? true:false;

        //下移指针
        $_mysqli->next_result();
        $_success2 = $_mysqli->affected_rows ==1? true:false;

        //如果两条都为真,也就是成功,如果出错,则执行回滚
        if($_success && $_success2){
            //执行手动提交
            $_mysqli->commit();
            echo '完美提交';

        }else{
                //执行回滚,撤销之前的所有操作
                $_mysqli->rollback();
                echo '已初始化所有操作';
        }


    }else{
        echo '程序出现异常';

    }



//语句执行过后再开启自动提交
    $_mysqli->autocommit(true);

    //关闭数据库
    $_mysqli->close();
 ?>

猜你喜欢

转载自blog.csdn.net/qq_36432666/article/details/79815957