php mysqli操作数据库(一)

php操作mysql:


    mysql:非永久链接,性能比较低,php5.5以后被废弃
    mysqli:永久链接,减轻服务器压力,只支持mysql
    pdo:能实现mysqli的常用功能,支持绝大部分数据库
    注:可以通过phpinfo()查看是否支持


php mysqli基础操作:


    mysqli操作数据库分为3步:
    --1:链接数据库
        $mysqli=new mysqli('host','username','password','database');
    --2:执行sql语句
        $mysqli->query($sql);
    --3:获取结果集:
        $result->fetch_array()
        
    mysqli添加数据:      

//链接数据库
$mysqli=new mysqli('127.0.0.1','root','fscq2019...','hua_mall');
//准备sql语句
$sql="INSERT INTO user(username,password,create_time) VALUE('A94295669','123456',$time)";
//执行sql
$mysqli->query($sql);

 mysqli删除数据:
        

$mysqli=new mysqli(host,name,pwd,database);
$sql="DELETE FROM user WHERE id='2'";
$mysqli->query($sql);

  mysqli更新数据:
        

$mysqli=new mysqli(host,name,pwd,database);
$sql="UPDATE user SET password='aaaaaa' WHERE id='1'";
$mysqli->query($sql);


        
    注:INSERT,UPDATE,DELETE操作返回true/false。但是最好不要使用query()方法的返回值作为判断操作是否成功的依据。
        因为如果执行给一个不存在的id执行操作,依旧是true。而应该使用受影响的行数来判断操作是否成功!
        获取受影响的条数:
            $mysqli->affected_rows;
    
    mysqli查询数据:
        

$mysqli=new mysqli(host,name,pwd,database);
$sql="SELECT * FROM user";
$coon=$mysqli->query($sql);
$result=$coon->fetch_all(MYSQLI_ASSOC);

     
    注:查询数据需要获取结果集。
        --获取结果集方法:
            fetch_all():获取所有行作为关联 数组,或数字数组或两者兼有。
            fetch_array():获取一行作为关联数组,或数字数组,或二者兼有。
            fetch_assoc():获取一行作为关联数组。
            

php mysqli事务控制:


    事务就是讲多个逻辑工作组合成一个执行单元的数据库操作(一起成功,一起失败)
    分为3步:
        $mysqli->autocommit(false);//开启事务
        $mysqli->rollback();//事务回滚
        $mysqli->commit();//提交
    例如:转账,a给b转10元,那么a-10,b+10。加减都必须操作成功才算成功,有一个出错则代表转账失败。需要事务回滚。
       

$mysqli->autocommit(false);
$sql="UPDATE user_value SET monery=monery-10 WHERE  id=1";
$mysqli->query($sql);
$r1=$mysqli->affected_rows;
echo $r1;
$sql="UPDATE user_value SET monery=monery+10 where  id=2";
$mysqli->query($sql);
$r2=$mysqli->affected_rows;
echo $r2;
if($r1>0&&$r2>0){
   $mysqli->commit();
   echo "操作成功!";
}else{
    $mysqli->rollback();
    echo "操作失败!";
}

    
php mysqli预处理:


    预处理是先提交sql语句到服务端,执行预编译,客户端执行sql语句时,只需上传输入参数即可。如果涉及多次读取或存储,效率高于普通sql执行操作。
    预处理之增删改操作步骤:
        $sql="???"; //暂不赋值,用问号代替
        $stmt=$mysqli->prepare($sql);  //创建预编译对象
        $stmt->bind_param();  //参数赋值,string-s,int-i,double-d,bool-b
        $stmt->execute();  //执行代码 
    --预编译添加数据使用实例:
       

 //mysqli预处理
$mysqli=new mysqli('127.0.0.1','root','fscq2019...','hua_mall');
//准备预编译sql语句
$sql="INSERT INTO user(username,password,create_time) VALUE(?,?,?)";
//创建预编译对象
$stmt=$mysqli->prepare($sql);
$name="a1499639";
$pwd="123456";
$create_time=time();
$arr=['a163511','b163511','c163511','d163511','e163511','f163511','g163511'];
for($i=0;$ibind_param('ssi', $arr[$i], $pwd, $create_time);
    //执行预编译
    $result = $stmt->execute();
}
var_dump($result);


    预处理之查询操作步骤:
        $sql="???"; //暂不赋值,用问号代替
        $stmt=$mysqli->prepare($sql);//创建预编译对象
        $stmt->bind_param(); //参数赋值
        $stmt->bind_result($name,$pwd,$create_time); //绑定结果集,有几个参数就绑定几个
        $stmt->execute();//执行代码
        $stmt->fetch();//取出结果集
    --预编译查询数据使用实例:
       

//预处理之查询
//准备sql
$sql="SELECT * FROM user_value WHERE id>?";
//创建预编译对象
$stmt=$mysqli->prepare($sql);
//参数赋值
$id=0;
$stmt->bind_param('i',$id);
$stmt->bind_result($id,$name,$value,$monery);
$stmt->execute();
while($stmt->fetch()){
    $data[]=[
        'id'=>$id,
         'name'=>$name,
         'value'=>$value,
         '$moner'=>$monery
    ];
}
var_dump($data);


    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

你可能感兴趣的:(php)