建立和断开连接
创建一个mysqli的对象:
$_mysqli = new mysqli();
连接MySQL的主机、用户、密码、数据库
$_mysqli->connect('localhost','root','root','test');
创建带连接参数的mysqli对象
$_mysqli = new mysqli('localhost','root','root','test');
单独选择数据库
$_mysqli->select_db('mysql');
断开MySQL
$_mysqli->close();
面向对象的连接方式例子
<?php //使用mysqli 对象 操作数据库//创建mysqli对象(资源句柄)$_mysqli = new mysqli();//连接数据库:主机名(IP)、账户、密码、数据库//mysqli_connect()函数(面向过程)==$_mysqli->connect()(面向对象)$_mysqli->connect('localhost','root','root','test');//断开MySQL mysqli_close() ==$_mysqli->close()$_mysqli->close();?>
创建带连接参数的连接方式
<?php $_mysqli = new mysqli('localhost','root','root','test');$_mysqli->close();?>
单独选择数据库(不推荐)
<?php $_mysqli = new mysqli('localhost','root','root','test');//如果上面没写明的话,单独选择一个数据库//这里选择的数据库会替代上面的数据库//一般情况下不推荐使用这种方法。$_mysqli->select_db('mysql');$_mysqli->close();?>
处理连接错误
数据库连接错误
mysqli扩展包含有很多特性用来捕获错误信息,例如:mysqli_connect_errno()
和mysqli_connect_error()
方法。
mysqli_connect_errno()
:返回连接数据库返回的错误代号;
mysqli_connect_error()
:返回连接数据库返回的错误代码及信息。
tips:@符号放在前面可以抑制错误信息。
<?php @$_mysqli = new mysqli('localhost','root','root','test5');//当连接参数出现错误,导致连接失败的时候//$_mysqli这个对象就不会创建成功,也就没有资源句柄的功能//没有资源句柄的功能也就是没有调用mysqli下的方法和属性的权限。if(mysqli_connect_errno()){echo '数据库连接错误,错误信息:'.mysqli_connect_error();exit();}$_mysqli->close();?>
数据库操作错误
errno
:返回数据库操作时的错误代号;
error
:返回数据库操作时的错误代码和信息
<?php @$_mysqli = new mysqli('localhost','root','root','test');//数据库连接时发生的错误,因为是在连接成功前执行,所以无面向对象。if(mysqli_connect_errno()){echo '数据库连接错误,错误信息:'.mysqli_connect_error();exit();}$_mysqli->select_db('asdadad');//数据库操作时发生错误,因为是在连接之后执行,所以有面向对象和过程// $_mysqli->errno;// $_mysqli->error;if($_mysqli->errno){echo '数据库操作错误:'.$_mysqli->error;}$_mysqli->close();?>
与数据库进行交互
大多数交互都与创建(Creation)、获取(Retrieval)、更新(Update)和删除(Deletion)任务有关,这些任务统称为CRUD。
获取数据
设置编码UTF8
$_mysqli->set_charset("utf8");
创建一句SQL查询语句
$_sql = "SELECT * FROM tg_user";
执行sql语句把结果集赋给变量
$_result = $_mysqli->query($_sql);
将结果集的第一行输出
print_r($_result->fetch_row());
释放查询内存
$_result->free();
普通获取数据例子:
<?php @$_mysqli = new mysqli('localhost','root','root','test');//数据库连接时发生的错误,因为是在连接成功前执行,所以无面向对象。if(mysqli_connect_errno()){echo '数据库连接错误,错误信息:'.mysqli_connect_error();exit();}//设置编码$_mysqli->set_charset('utf8');//创建一句查询的SQL语句。$_sql = "SELECT * FROM user";//执行sql语句,把结果集赋给变量$_result = $_mysqli->query($_sql);//通过结果集取得第一行数据//fetch_row()返回的是一个数组,里面是第一条数据的集合print_r($_result->fetch_row());//运行一次,指针就向下移一条,要显示第二条就再运行一次。print_r($_result->fetch_row());//销毁结果集$_result->free();//关闭数据库$_mysqli->close();?>
解析查询结果
使用索引数组和关联数组:
<?php @$_mysqli = new mysqli('localhost','root','root','test');//数据库连接时发生的错误,因为是在连接成功前执行,所以无面向对象。if(mysqli_connect_errno()){echo '数据库连接错误,错误信息:'.mysqli_connect_error();exit();}//设置编码$_mysqli->set_charset('utf8');//创建一句查询的SQL语句。$_sql = "SELECT * FROM user";//执行sql语句,把结果集赋给变量$_result = $_mysqli->query($_sql);//使用索引数组取值// $_row = $_result->fetch_row();// echo $_row[2];//因为是数组,可以用遍历方法,因为默认是赋值,//需要加两个感叹号,让其变成布尔值。while (!!$_row = $_result->fetch_row()) {echo $_row[3].'<br/>';}//销毁结果集$_result->free();//关闭数据库$_mysqli->close();?>
使用关联数组取值:
fetch_assoc()
函数
<?php @$_mysqli = new mysqli('localhost','root','root','test');//数据库连接时发生的错误,因为是在连接成功前执行,所以无面向对象。if(mysqli_connect_errno()){echo '数据库连接错误,错误信息:'.mysqli_connect_error();exit();}//设置编码$_mysqli->set_charset('utf8');//创建一句查询的SQL语句。$_sql = "SELECT * FROM user";//执行sql语句,把结果集赋给变量$_result = $_mysqli->query($_sql);$_assoc = $_result->fetch_assoc();echo $_assoc['username'];//遍历while(!!$_assoc = $_result->fetch_assoc()){echo $_assoc['username'];}$_result->free();//关闭数据库$_mysqli->close();?>
使用索引+关联数组取值
fetch_array()
函数
<?php @$_mysqli = new mysqli('localhost','root','root','test');//数据库连接时发生的错误,因为是在连接成功前执行,所以无面向对象。if(mysqli_connect_errno()){echo '数据库连接错误,错误信息:'.mysqli_connect_error();exit();}//设置编码$_mysqli->set_charset('utf8');//创建一句查询的SQL语句。$_sql = "SELECT * FROM user";//执行sql语句,把结果集赋给变量$_result = $_mysqli->query($_sql);//索引+关联数组$_array = $_result->fetch_array();echo $_array[3];echo $_array['username'];//遍历也一样的 $_result->free();//关闭数据库$_mysqli->close();?>
查询选择的行数和受影响的行数
选择的行数:num_rows
(一般用于SELECT);
影响的行数:affected_rows
(一般用于UPDATE和DELETION的影响查询);
<?php @$_mysqli = new mysqli('localhost','root','root','test');//数据库连接时发生的错误,因为是在连接成功前执行,所以无面向对象。if(mysqli_connect_errno()){echo '数据库连接错误,错误信息:'.mysqli_connect_error();exit();}//设置编码$_mysqli->set_charset('utf8');//创建一句查询的SQL语句。$_sql = "SELECT * FROM user";//执行sql语句,把结果集赋给变量$_result = $_mysqli->query($_sql);//查看选择了多少行echo $_result->num_rows;//查看影响了多少行echo $_mysqli->affected_rows; $_result->free();//关闭数据库$_mysqli->close();?>
移动指针的操作和获取字段
计算有多少条字段:field_count
echo $_result->field_count;
获取字段名称:fetch_field()
$_field = $_result->fetch_field();
echo $_field->name;
一次性取得所有字段
$_fields = $_result->fetch_fields();
//print_r($_fields);
//单独取出一条字段
//echo $_fiels[0]->name;//遍历
foreach($_fileds as $_field){echo $_field->name.'<br/>';
}
执行数据库事务
事务(transcaction)是作为一整个单元的一组有序的数据库操作。
如果一组中的所有操作都成功,则认为事务成功,即使只有一个失败操作,事务也不成功。
如果所有操作成功完成,事务则提交(commit),其修改将作用于所有其他数据库进程,如果一个操作失败,则事务将回滚(roll back),该事务所有操作的影响都将取消。
用途:常用于金币支付,或者交易等出现交易失败时的事务操作。
MySQL必须是InnoDB或BDB引擎的一种。
注意:首先必须先关闭自动提交数据。
<?php @$_mysqli = new mysqli('localhost','root','root','test');//数据库连接时发生的错误,因为是在连接成功前执行,所以无面向对象。if(mysqli_connect_errno()){echo '数据库连接错误,错误信息:'.mysqli_connect_error();exit();}//设置编码$_mysqli->set_charset('utf8');//首先关闭自动提交(手动提交)$_mysqli->autocommit(false);//创建两个SQL语句。“.”号是连接语句的意思。$_sql ="UPDATE banka SET golden=golden-50 WHERE id=1;";$_sql .="UPDATE bankb SET golden=golden+50 WHERE id=1";//执行条SQL语句//只要两条sql语句都成功。就手动提交给数据库。//否则就回滚,撤销之前的无效操作。if($_mysqli->multi_query($_sql)){//通过影响的行数判断SQL是否成功执行//如果$_success是false,说明SQL语句有误,就执行回滚。// if($_mysql->affected_rows(==1)){// $_success = true;// }else{// $_success=false;// }//上面这一段的简化写法。意思:如果有影响,那就是true,否则就是false$_success = $_mysqli->affected_rows ==1? true:false;//下移指针$_mysqli->next_result();$_success2 = $_mysqli->affected_rows ==1? true:false;//如果两条都为真,也就是成功,如果出错,则执行回滚if($_success && $_success2){//执行手动提交$_mysqli->commit();echo '完美提交';}else{//执行回滚,撤销之前的所有操作$_mysqli->rollback();echo '已初始化所有操作';}}else{echo '程序出现异常';}//语句执行过后再开启自动提交$_mysqli->autocommit(true);//关闭数据库$_mysqli->close();?>