建立和断开连接
创建一个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();
?>