mysqli 连接是永久连接,而mysql是非永久连接。什么意思呢? mysql连接每当第二次使用的时候,都会重新打开一个新的进程,而mysqli则只使用同一个进程,这样可以很大程度的减轻服务器端压力
mysqli封装了诸如事务等一些高级操作,同时封装了DB操作过程中的很多可用的方法。
应用比较多的地方是 mysqli的事务
<?php
$mysqli = new mysqli('127.0.0.1','root','','ssdb');
if($mysqli->connect_errno){
echo "Failed to connnect to MySql:" . $mysqli->connect_error;
}
$mysqli->query("set names utf8");
//默认事务提交auto-commit 是打开的,可直接提交sql语句
$s1 = $mysqli->query("INSERT INTO art_classification (type_id,article_type) values (null,'互联网')");
事务操作
<?php
$mysqli=new mysqli("localhost","root","123456","test003");
if($mysqli->connect_error){
die ("LINK FAILED".$mysqli->connect_error);
}
$mysqli->query("set names utf8");
//关闭自动提交;
$mysqli->autocommit(false);
$sql01="update account set balance=balance+4 where id=1;";
$sql02="update account set balance=balance-4 where id=2;";
$b1=$mysqli->query($sql01) or die($mysqli->error);
$b2=$mysqli->query($sql02) or die($mysqli->error);
if(!$b1||!$b2){
echo "Failed".$mysqli->error;
//回滚;
$mysqli->rollback();
}
else {
echo "success";
//提交;
$mysqli->commit();
}
$mysqli->close();
二、查询结果集
<?php
require '../data/conn.php';
$sql = 'SELECT * FROM zy_category';
$resulet = $mysqli->query($sql);
var_dump($resulet);
echo "<br>=====<br>";
// $row = $resulet->fetch_all();
$out = [];
while (true) {
$row = $resulet->fetch_assoc();
if ($row == null) break;
$out[] = $row;
}
var_dump($out);
?>
结果
object(mysqli_result)#2 (5) { ["current_field"]=> int(0) ["field_count"]=> int(2) ["lengths"]=> NULL ["num_rows"]=> int(5) ["type"]=> int(0) }
==========================================
array(5) { [0]=> array(2) { ["c_id"]=> string(1) "1" ["article_type"]=> string(2) "it" } [1]=> array(2) { ["c_id"]=> string(1) "2" ["article_type"]=> string(9) "互联网" } [2]=> array(2) { ["c_id"]=> string(1) "3" ["article_type"]=> string(2) "H5" } [3]=> array(2) { ["c_id"]=> string(1) "4" ["article_type"]=> string(3) "CSS" } [4]=> array(2) { ["c_id"]=> string(1) "5" ["article_type"]=> string(6) "创业" } }
参考php手册 :http://php.net/manual/zh/mysqli-result.fetch-assoc.php