PHP使用mysqli操作MySQL数据库的简单方法
PHP的mysqli扩展提供了其先行版本的所有功能,此外,由于MySQL已经是一个具有完整特性的数据库服务器,这为PHP又添加了一些新特性。而mysqli恰恰也支持了这些新特性。
一.建立和断开连接
与MySQL数据库交互时,首先要建立连接,最后要断开连接,这包括与服务器连接并选择一个数据库,以及最后关闭连接。与mysqli几乎所有的特性一样,这一点可以使用面向对象的方法来完成,也可以采用过程化的方式完成。
1.创建一个mysqli的对象
$_mysqli=newmysqli();
2.连接MySQL的主机、用户、密码、数据库
$_mysqli->connect('localhost','root','yangfan','guest');
3.创建带连接参数的mysqli对象
$_mysqli=newmysqli('localhost','root','yangfan','guest');
4.单独选择数据库
$_mysqli->select_db('testguest');
5.断开MySQL
$_mysqli->close();
二.处理连接错误
如果无法连接MySQL数据库,那么这个页面不太可能继续完成预期的工作。因此,一定要注意监视连接错误并相应地做出反应。Mysqli扩展包含有很多特性可以用来捕获错误信息,例如:mysqli_connect_errno()和mysqli_connect_error()方法。
mysqli_connect_errno()函数返回连接数据库返回的错误号。
Mysqli_connect_error()函数返回连接数据库返回的错误代码。
if(mysqli_connect_errno()){ echo'数据库连接错误,错误信息:'.mysqli_connect_error(); exit(); }
errno属性返回数据库操作时的错误号。
error属性返回数据库操作时的错误代码。
if($_mysqli->errno){ echo'数据库操作时发生错误,错误代码是:'.$_mysqli->error; }
三.与数据库进行交互
绝大多数查询都与创建(Creation)、获取(Retrieval)、更新(Update)和删除(Deletion)任务有关,这些任务统称为CRUD。
1.获取数据
网页程序大多数工作都是在获取和格式化所请求的数据。为此,要向数据库发送SELECT查询,再对结果进行迭代处理,将各行输出给浏览器,并按照自己的要求输出。
//设置一下编码utf8 $_mysqli->set_charset("utf8"); //创建一句SQL语句 $_sql="SELECT*FROMtg_user"; //执行sql语句把结果集赋给$_result $_result=$_mysqli->query($_sql); //将结果集的第一行输出 print_r($_result->fetch_row()); //释放查询内存(销毁) $_result->free();
2.解析查询结果
一旦执行了查询并准备好结果集,下面就可以解析获取到的结果行了。你可以使用多个方法来获取各行中的字段,具体选择哪一个方法主要取决于个人喜好,因为只是引用字段的方法有所不同。
将结果集放到对象中
由于你可能会使用mysqli的面向对象的语法,所以完全可以采用面向对象的方式管理结果集。可以使用fetch_object()方法来完成。
//将结果集包装成对象
$_row=$_reslut->fetch_object();
//输出对象中的一个字段(属性)
echo$_row->tg_username;
//遍历所有的用户名称
while(!!$_row=$_reslut->fetch_object()){
echo$_row->tg_username.'<br/>';
}
使用索引数组和关联数组
//将结果集包装成数组(索引+关联)
$_row=$_reslut->fetch_array();
//输出下标是3的字段(属性)
echo$_row[3];
//将结果集包装成索引数组
$_row=$_reslut->fetch_row();
echo$_row[3];
//将结果集包装成关联数组
$_row=$_reslut->fetch_assoc();
echo$_row['tg_username'];
3.确定所选择的行和受影响的行
通常希望能够确定SELECT查询返回的行数,或者受INSERT、UPDATE或DELET查询影响的行数。我们可以使用num_rows和affected_rows两个属性
//当使用查询时,想了解SELECT查询了多少行,可以使用num_rows。
echo$_reslut->num_rows;
//当使用查询时,想了解SELECT、INSERT、UPDATE、DELETE查询时影响的行数,可以使用affected_rows;注意,它是$_mysqli下的属性
echo$_mysqli->affected_rows;
4.移动指针的操作和获取字段
当你并不想从第一条数据开始获取,或者并不想从第一个字段获取,你可以使用数据指针移动或者字段指针移动的方式调整到恰当的位置。当然,你还可以获取字段的名称及其相关的属性。
//计算有多少条字段 echo$_reslut->field_count; //获取字段的名称 $_field=$_reslut->fetch_field(); echo$_field->name; //遍历字段 while(!!$_field=$_reslut->fetch_field()){ echo$_field->name.'<br/>'; } //一次性取得字段数组 print_r($_reslut->fetch_fields()); //移动数据指针 $_reslut->data_seek(5); //移动字段指针 $_reslut->field_seek(2);
5.执行多条SQL语句
有的时候,我们需要在一张页面上同时执行多条SQL语句,之前的方法就是分别创建多个结果集然后使用。但这样资源消耗很大,也不利于管理。PHP提供了执行多条SQL语句的方法$_mysqli->multi_query();
//创建多条SQL语句 $_sql.="SELECT*FROMtg_user;"; $_sql.="SELECT*FROMtg_photo;"; $_sql.="SELECT*FROMtg_article"; //开始执行多条SQL语句 if($_mysqli->multi_query($_sql)){ //开始获取第一条SQL语句的结果集 $_result=$_mysqli->store_result(); print_r($_result->fetch_array()); //将结果集指针移到下一个 $_mysqli->next_result(); $_result=$_mysqli->store_result(); print_r($_result->fetch_array()); $_mysqli->next_result(); $_result=$_mysqli->store_result(); print_r($_result->fetch_array()); }else{ echo'sql语句有误!'; }
6.执行数据库事务
事务(transaction)是作为整个一个单元的一组有序的数据库操作。如果一组中的所有操作都成功,则认为事务成功,即使只有一个失败操作,事务也不成功。如果所有操作成功完成,事务则提交(commit),其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚(rollback),该事务所有操作的影响都将取消。
首先,您的MySQL是InnoDB或BDB引擎的一种,一般来说,你安装了AppServ的集成包,你选择InnoDB的引擎的数据库即可。如果你建立的表不是InnoDB,可以在phpmyadmin里修改。
//首先你必须关闭自动提交数据 $_mysqli->autocommit(false); //创建一个SQL语句,必须同时运行成功,不能出现一个成功,一个失败 $_sql.="UPDATEtg_friendSETtg_state=tg_state+5WHEREtg_id=1;"; $_sql.="UPDATEtg_flowerSETtg_flower=tg_flower-5WHEREtg_id=1;"; //执行两条SQL语句 if($_mysqli->multi_query($_sql)){ //获取第一条SQL一影响的行数 $_success=$_mysqli->affected_rows==1?true:false; //下移,第二条SQL $_mysqli->next_result(); //获取第二条SQL影响的行数 $_success2=$_mysqli->affected_rows==1?true:false; //判断是否都正常通过了,两个SQL if($_success&&$_success2){ $_mysqli->commit(); echo'完美提交!'; }else{ $_mysqli->rollback(); echo'程序出现异常!'; } } }else{ echo"SQL语句有误:".$_mysqli->errno.$_mysqli->error; } //最后还必须开启自动提交 $_mysqli->autocommit(true);
以上这篇PHP使用mysqli操作MySQL数据库的简单方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。