从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();
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();

#绑定参数说明:
#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();
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();
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'; #查看表的详细信息

解析说明:
所有的DML都需要使用commit或rollback进行提交或回滚。
像DDL和DCL都是隐式提交, create table .... / grant 等都是自动提交。不用使用commit。
说明一下:
开启了事务 start transaction ,下面需要执行 create table 或 DDL /DCL 语句都是先提交commit
再进行提交。