作为程序员一定要保持良好的睡眠,才能好编程

mysqli连接数据库使用说明

发布时间:2016-10-30

从php5.0以上版本出现了mysqli 数据库连接的升级版本,对比mysql效率上有一定的提升,

它是从面向过程到面向对像的转变。


//属性


#连接使用的属性

$mysqli->connect_errno

$mysqli->connnect_error


#执行所有方法后得到的一个errno 或 error 错误

$mysqli->errno

$mysqli->error


$mysqli->affected_rows   //得到影响的条数

$mysqli->insert_id



//方法

$mysqli->query($sql);

$mysqli->select_db($dbName);

$result=$mysqli->query($sql);

$_data=[];

while($row=$result->fetch_object()){

    $_data[]=$row;

}

$result->free_result();

$mysqli->close();



那么我们来看一看是如何使用的吧:


1、插入数据 query 方法

 
    
    header("Content-type:text/html;charset=utf-8");
    
    //连接数据库  test
    $mysqli=new mysqli("localhost","root","song","test");
    if($mysqli->connect_errno){
        die("数据库连接失败:".$mysqli->error);
    }
    //如果执行到这里,证明数据库连接成功
    $sql="insert into web_account(username,pricle,posttime)values('yonglin',3000,".time().")";
    $res=$mysqli->query($sql);
    if($res){
        echo "insert success:".$mysqli->insert_id;
    }
    $mysqli->close();

d2.png



2、使用execute() 方法插入数据 适用于批量

    
    header("Content-type:text/html;charset=utf-8");
    //连接数据库  test
    $mysqli=new mysqli("localhost","root","song","test");
    if($mysqli->connect_errno){
        die("数据库连接失败:".$mysqli->error);
    }
    
    //使用execute方法 执行 
    $sql="INSERT INTO web_account(username,pricle,posttime)VALUES(?,?,?)";
    $statement=$mysqli->prepare($sql);
    $statement->bind_param("sdi",$username,$pricle,$posttime);
    //这里写它的变量 以上为什么这样写呢?
    //就是在sql中全部把它编译好,我们直接使用循环中数据进行填充即可
    $_data=[
                array("username"=>"yx","pricle"=>433,"posttime"=>time()),
                array("username"=>"yx1","pricle"=>4133,"posttime"=>time())
           ];
    foreach($_data as $k=>$val){

        $username=$val['username'];
        $pricle=$val['pricle'];
        $posttime=$val['posttime'];

        $statement->execute();
    }

    if($mysqli->errno){
        die("sql error:".$mysqli->error);
    }else{
        echo "insert success";
    }

    $mysqli->close();

 

d4.png

    #绑定参数说明:
    #1、这是字符串类型,必须填写和后面的参数一一对应
    # s 代表string  i代表整数数字 b代表blog  d代表浮点 小数
    #sql语句包含几个问号,这里就要绑定几个参数





    header("Content-type:text/html;charset=utf-8");
    //连接数据库  test
    $mysqli=new mysqli("localhost","root","song","test");
    if($mysqli->connect_errno){
        die("数据库连接失败:".$mysqli->error);
    }
    
    //使用execute方法 执行 
    $sql="INSERT INTO web_account(username,pricle,posttime)VALUES(?,?,?)";
    $statement=$mysqli->prepare($sql);
    $statement->bind_param("sdi",$username,$pricle,$posttime);
    //这里写它的变量 以上为什么这样写呢?

    $username="mouse";
    $pricle=11;
    $posttime=time();

    $statement->execute();
  
    if($mysqli->errno){
        die("sql error:".$mysqli->error);
    }else{
        echo "insert success";
    }

    $mysqli->close();

d3.png


3、查询数据

    header("Content-type:text/html;charset=utf-8");
    //连接数据库  test
    $mysqli=new mysqli("localhost","root","song","test");
    if($mysqli->connect_errno){
        die("数据库连接失败:".$mysqli->error);
    }
    
    //使用execute方法 执行 
    $sql="SELECT * FROM web_account ORDER BY id DESC";
    $result=$mysqli->query($sql);
    if($result){
        $_data=array();
        while($row=$result->fetch_object()){
            $_data[]=$row;
        }
        echo "<pre style='color:blue;'>";
        print_r($_data);
        echo "</pre>";
    }
    $mysqli->close();

d1.png


4、如何使用事务

msyql的默认行为是在每条sql语句执行后执行一个commit语句,从而有效的将每一条sql语句独立为一个事务。

但根据我们的业务需求,需要多条语句放在一起执行才可以。这样我们就需要设置一个mysql的autocommit为 0

不让它自动提交。

同时还需要设置一下 start transaction;

下面我们来看看如何使用事务: 要使用事务的表必须是支持的事务的。常用支持事务的表是 InnoDB


php如何使用:

    
    header("Content-type:text/html;charset=utf-8");
    //面向对象  mysqli 连接使用方法
    $mysqli=new mysqli("localhost","root","song");
    
    //判断是否连接成功
    if($mysqli->connect_errno){
        exit("数据库连接失败:".$mysqli->connect_error());
    }
    
    //选择数据库
    $mysqli->select_db("test");
    
    //关闭自动提交事务
    $mysqli->autocommit(false);
    
    //等同于 set autocommit=0; start transaction; 开启事务
    
    //存钱
    
    $sql="INSERT INTO web_account(username,pricle,posttime)VALUES(?,?,?)";
    $statement=$mysqli->prepare($sql);
    $statement->bind_param("sdi",$username,$pricle,$posttime);
    $username="xi";
    $pricle=1500;
    $posttime=time();
    if($statement->execute()){
        P("插入ID:".$mysqli->insert_id);
    }
    if(!$msyqli->errno){
        $mysqli->commit();  //等同于 commit
    }else{
        $mysqli->rollback(); //等同于 rollback;
    }




以下操作是mysql客户端:


#查看表的详细信息
show table status like 'web_account';
#查看表的详细信息


d8.png


解析说明:

所有的DML都需要使用commit或rollback进行提交或回滚。

像DDL和DCL都是隐式提交, create table ....   /  grant  等都是自动提交。不用使用commit。


说明一下:

开启了事务   start transaction  ,下面需要执行 create table 或 DDL /DCL 语句都是先提交commit

再进行提交。