<?php
header("Content-Type:text/html;charset=utf-8");
//使用mysqli对象操作数据库
//方法一:
//$_mysqli = new mysqli();
//方法二:
@$_mysqli = new mysqli('localhost','127_0_0_14','123456','127_0_0_14');
//连接数据库 1.主机名(ip) 2.账户 3.密码 4.数据库
//mysqli_connect()函数 == $_mysqli->connect()
//$_mysqli->connect('localhost','127_0_0_16','123456','127_0_0_16');
//为什么要用函数去捕捉呢?
//为什么不用面向对象的方式去捕捉呢?
//0表示没有任何错误.,判断数据库的错误
if (mysqli_connect_errno()) {
echo '数据库连接出现了错误.错误的信息是:'.mysqli_connect_error();
exit();
}
//设置一下编码
$_mysqli->set_charset('utf8');
//单独选择一个数据库
//这里选择的数据库会替代上面的数据库
//为了避免这些麻烦,尽量不用去单独指向了,这个函数可加可不加
$_mysqli->select_db('127_0_0_14');
//数据库操作时发生的错误,这个判断可加可不加
if ($_mysqli->errno) {
echo '数据库操作错误:'.$_mysqli->error;
}
//创建一句SQL,获取数据库的表数据
$_sql = "SELECT * FROM ey_users";
//执行SQL语句,把结果集赋给$_result(资源句柄);
//这个赋值,再任何一个语法都不变,这个是普通方法,只能执行一条,下面的可以执行多条
$_result = $_mysqli->query($_sql);
//创建三条修改的SQL语句,注意sql里的.和最后面的分号;
// $_sql .="UPDATE ey_users SET username='是是是' WHERE users_id=1;";
// $_sql .="UPDATE ey_biaoer SET username='是是是' WHERE users_id=1;";
// $_sql .="UPDATE ey_biaosan SET username='是是是' WHERE users_id=1";
// //使用同时执行的方法,可以同时执行多条
// $_mysqli->multi_query($_sql);
//创建三条选择语句 ,注意sql里的.和最后面的分号;
// $_sql .= "SELECT * FROM tg_photo;";
// $_sql .= "SELECT * FROM tg_user;";
// $_sql .= "SELECT * FROM tg_friend";
// //如果第一条sql没出错就往下执行
// if ($_mysqli->multi_query($_sql)) {
// //获取当前的结果集,获取第一条结果集
// $_result = $_mysqli->store_result();
// print_r($_result->fetch_row());
// echo '<br />';
// //将结果集的指针移到下一条,并判断第二条SQL语句有没有出错
// $_mysqli->next_result();
// $_result = $_mysqli->store_result();
// if (!$_result) {
// echo '第二条SQL语句有误!';
// exit();
// }
// print_r($_result->fetch_row());
// echo '<br />';
// //继续将结果集的指针移到下一条,并判断第三条SQL语句有没有出错
// $_mysqli->next_result();
// $_result = $_mysqli->store_result();
// if (!$_result) {
// echo '第三条SQL语句有误!';
// exit();
// }
// print_r($_result->fetch_row());
// } else {
// echo '第一条SQL语句有误';
// exit();
// }
//通过结果集,获取第一行数据,这个是索引数组
//fetch_row(); 是返回的一个数组,里面是第一条数据的集合
//这个是索引数组取值,运行一次指针下移一条
//print_r($_result->fetch_row());
//$_row = $_result->fetch_row();
//echo $_row[1];
//遍历数组,打印所有数据,!!是转换为数组,这样的弊端是,下标很难记
// while(!!$_row = $_result->fetch_row()){
// echo $_row[1].'<br />';
// }
//使用关联数组取值,获取第一行数据,这个是关联数组
//这个是关联数组取值,运行一次指针下移一条
//print_r($_result->fetch_assoc());
//$_row = $_result->fetch_assoc();
//echo $_row['username'];
//遍历关联数组,打印所有数据
// while(!!$_row = $_result->fetch_assoc()){
// echo $_row['username'].'<br />';
// }
//使用索引+关联数组取值,这个下标用数组和数据库名都可以
//print_r($_result->fetch_array());
//$_array = $_result->fetch_array();
//echo $_array[1];
//echo $_array['username'];
//遍历索引+关联数组,打印所有数据
// while(!!$_array = $_result->fetch_array()){
// echo $_array[1].'<br />';
// echo $_array['username'].'<br />';
// }
//使用OOP的方式,object,这个是面向对象写法
//print_r($_result->fetch_object());
//$_object = $_result->fetch_object();
//echo $_object->username;
//echo $_result->fetch_object()->username; //这个写法是直接输出结果,没有赋值过程了
//遍历OPPO方法,object
// while(!!$_object = $_result->fetch_object()){
// echo $_object->username.'<br />';
// }
//我要看下读取了多少条,就是读取了多少条sql数据
//echo $_result->num_rows;
//我影响了多少行
//echo $_mysqli->affected_rows;
//统计列数,有多少个字段,会根据你的SQL语句来判断有多少字段
//echo $_result->field_count;
//获取字段的名字
//$_field = $_result->fetch_field();
//print_r($_field);
//echo $_field->name;
//遍历所有的字段名称
// while(!!$_field = $_result->fetch_field()){
// echo $_field->name.'<br />';
// }
//一次性取得所有的字段
//$_fields = $_result->fetch_fields();
//print_r($_field);
//echo $_fields[0]->name;
//遍历一次性取得的字段
// foreach($_fields as $_field){
// echo $_field->name.'<br />';
// }
//移动数据指针,就是往下找第几行,记得是从0开始
// $_result->data_seek(1);
// $_row = $_result->fetch_row();
// echo $_row[1];
//移动字段指针,就是从左往右第几列开始,记得是从0开始
// $_result->field_seek(2);
// $_field = $_result->fetch_field();
// echo $_field->name;
//销毁结果集,上面必须有这个结果,否则报错
$_result->free();
//断开MySQL mysqli_close() == $_mysqli->close()
$_mysqli->close();
?>
四种取值方法:
1、索引数组取值:fetch_row()
2、关联数组取值:fetch_assoc()
3、索引数组+关联数组取值:fetch_array()
4、OOP方法,面相对象方法取值:fetch_object(),不需要下标,直接指向
下面是多条SQL同时执行,有一条失败则回滚,不做提交,这个数据库储存类型必须是
存储引擎:InnoDB
<?php
//设置数据库执行多条是否成功,如全部sql执行成功就继续,如果有一条不成功就回滚,不做任何操作
$_mysqli = new mysqli('localhost','root','yangfan','testguest');
//数据库连接时发生的错误
if (mysqli_connect_errno()) {
echo '数据库连接出现了错误.错误的信息是:'.mysqli_connect_error();
exit();
}
//设置一下编码
$_mysqli->set_charset('utf8');
//设置关闭自动提交(手工提交)
$_mysqli->autocommit(false);
//创建两个SQL语句,注意连接符和后面的分号;
$_sql .= "UPDATE tg_flower SET tg_flower=tg_flower-50 WHERE tg_id=1;";
$_sql .= "UPDATE tg_friend SET tg_state=tg_state+50 WHERE tg_id=1";
//执行多条SQL语句
//只要这两条SQL语句都成功了,就手工提交给数据库
//否则,就回滚,撤销之前的有效操作。
if ($_mysqli->multi_query($_sql)) {
//通过影响的行数,来判定SQL语句是否成功执行
//如果$_success是false说明sql语句有误,那么就执行回滚,否则就手工提交
//affected_rows我影响了多少行,如果是一行就继续执行,如果是0就返回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 '第一条SQL语句有错误!';
}
//再开启自动提交
$_mysqli->autocommit(true);
//关闭数据库
$_mysqli->close();
?>
此课在17-21课