使用MySQLi操作数据库

建立和断开连接

创建一个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();?>

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注