mysql:非永久链接,性能比较低,php5.5以后被废弃
mysqli:永久链接,减轻服务器压力,只支持mysql
pdo:能实现mysqli的常用功能,支持绝大部分数据库
注:可以通过phpinfo()查看是否支持
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():获取一行作为关联数组。
事务就是讲多个逻辑工作组合成一个执行单元的数据库操作(一起成功,一起失败)
分为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 "操作失败!";
}
预处理是先提交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);