mysqli操作数据库,连接和四种取值方法

<?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课

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值