天天看点

使用 Mysqli操作数据库

一.连接数据库

1.面向过程

1.1:mysqli_connect(server,user,pwd);

1.2:mysqli_connect(server,user,pwd,db);

引:mysql_connect(server,user,pwd);(MySQL)注:mysql没有表示数据库的参数

2.面向对象

2.1:$_mysqli = new mysqli(server,user,pwd);

2.2:$_mysqli = new mysqli(server,user,pwd,db);

2.3:$_mysqli = new mysqli();

$_mysqli->connect(server,user,pwd);

2.4:$_mysqli = new mysqli();

$_mysqli->connect(server,user,pwd,db);

注:connect方法中如果参数出错(例如数据库不存在)时会报错,可以用@错误抑制符屏蔽错误

二.选择数据库

1.面向过程

 mysqli_select_db($con,db);//$con 必选

 引:mysql_select_db(db,$con);(MySQL)注:两个参数的位置不同,$con 参数可选。

2.面向对象

 $mysqli->select_db(db);//如果参数为一个不存在的数据库时,不会报错!

三.断开Mysql

1.面向过程

 mysqli_close($con);//$con 必选

 引:mysql_close($con); //$con 可选

2.面向对象

 $_mysqli->close();

四.处理连接错误

mysqli_connect_errno()函数返回连接数据库返回的错误号。

mysqli_connect_error()函数返回连接数据库返回的错误代码。

if(mysqli_connect_errno()) 

{

echo '数据库连接错误,错误信息:'.mysqli_connect_error();

exit();

}

注:1.连接错误只能用函数,不可以用对象的方法,因为如果连接失败,创建的对象就不存在,也就无法调用方法。

  2.mysql_errno($con) 和 mysql_error($con) 可以返回连接错误信息,但是 mysqli_errno($con) 和 mysqli_error($con) 不可以用来返回连接错误信息,因为这里的 $con 参数必选的,如果连接错误,那个就不存在一个正确的$con。

五.处理操作错误

1.面向过程

 mysqli_errno($con); 

 mysqli_error($con); 

 注:$con 参数必选,对应于MySQL中其函数分别是:mysql_errno($con)和 mysql_error($con),$con 参数可选。

2.面向对象

 errno属性返回数据库操作时的错误号。

 error属性返回数据库操作时的错误代码。

 if($_mysqli->errno)

 {

echo '数据库操作时发生错误,错误代码是:'.$_mysqli->error;

 }

六.获取数据

$_sql = 'select * from stt';

1.面向过程

 $con = mysqli_connect('localhost', 'root', 'root');//mysql函数mysql_connect

 mysqli_select_db($con,'basic');//mysql函数mysql_select_db,$con 参数在最后或者省略

 mysqli_set_charset($con,'utf8');//mysql函数mysql_set_charset,$con 参数在最后或者省略

 $_result = mysqli_query($con,$_sql);//mysql函数mysql_query,$con 参数在最后或者省略

 >>>print_r(mysqli_fetch_row($_result));//mysql函数mysql_fetch_row

 >>>print_r(mysqli_fetch_assoc($_result));//mysql函数mysql_fetch_assoc

 >>>print_r(mysqli_fetch_array($_result)); //mysql函数mysql_fetch_array

2.面向对象

 $_mysqli = new mysqli('localhost', 'root', 'root','basic');

 $_mysqli->set_charset('utf8');

 $_result = $_mysqli->query($_sql);

  2.1:将结果集包装成索引数组

 //$_row = $_result->fetch_row();

 while(!!$_row = $_result->fetch_row())

 {

echo $_row[1].'<br>';

 }

  2.2:将结果集包装成关联数组

 //$_row = $_result->fetch_assoc();

 while(!!$_row = $_result->fetch_assoc())

 {

echo $_row['name'].'<br>';

 }

  2.3:将结果集包装成数组(索引+关联),速度会比较慢

 //$_row = $_result->fetch_array();

 while(!!$_row = $_result->fetch_array())

 {

echo $_row[1].'<br>';

echo $_row['name'].'<br>';

 }

  2.4:将结果集包装成对象

 //$_row = $_result->fetch_object();

 while(!!$_row = $_result->fetch_object())

 {

echo $_row->name.'<br>'; //结果中的字段名字,其实是对象中的属性的名字

 }  

七.关于结果集的属性或方法

1.确定所选择的行数

 $_result->num_rows;

 //当使用查询时,想了解SELECT、INSERT、UPDATE、DELETE查询时影响的行数,可以使用affected_rows;注意,它是$_mysqli下的属性:$_mysqli->affected_rows;

2.确定有多少个字段

 $_result->field_count;

3.获取一个字段的名称

 //$_field = $_result->fetch_field();//对象

 while(!!$_field = $_result->fetch_field())

 {

echo $_field->name.'<br>';

 }

4.获取所有字段

 $_fields = $_result->fetch_fields();//数组

 foreach($_fields as $_field)

 {

echo $_field->name.'<br>';

 }

5.移动数据指针

 //输出结果集中第三条数据

 $_result->data_seek(2);

 $_row = $_result->fetch_row();

 print_r($_row);

6.移动字段指针

 //输出结果集中第三个字段的名字

 $_result->field_seek(2);

 $_field = $_result->fetch_field();

 echo $_field->name;

八.执行多条SQL语句

//构造多条SQL语句,注意中间要用;隔开

$_sql = 'select * from stt;';

$_sql .= 'select * from stt1;';

$_sql .= 'select * from stt2';

//记录是第几条语句出错的

$i = 1;

if ($_mysqli->multi_query($_sql))

{   

//开始获取第一条SQL语句的结果集

while (!!$_result = $_mysqli->store_result())

{

while (!!$_row=$_result->fetch_row())

{

print_r($_row);

}

//将结果集指针移到下一个

$_mysqli->next_result(); 

$i++;

}

}

if($i<=3)

{

echo '第'.$i.'个SQL语句有误:'.$_mysqli->errno.$_mysqli->error;

}

九.执行数据库事务(transaction)

事务是作为整个一个单元的一组有序的数据库操作。如果一组中的所有操

作都成功,则认为事务成功,即使只有一个失败操作,事务也不成功。如果所有操作成功完成,事务则提交(commit),其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚(rollback),该事务所有操作的影响都将取消。

//1.将数据表的引擎设置成InnoDB或BDB引擎的一种

//2.设置关闭自动提交数据

$_mysqli->autocommit(false);

//创建SQL语句,必须同时运行成功

$_sql = 'update stt set name="婷" where id>=1;';

$_sql .= 'update stt1 set name="婷" where id=1;';

$_sql .= 'update stt2 set name="婷" where id=1';

$i = 1;

//执行多条SQL语句

if ($_mysqli->multi_query($_sql))

{

//3.如果每个SQL语句执行都有被影响的条数则认为SQL语句正确,执行成功,检查下一条语句

while( $_mysqli->affected_rows && $i<=3 )

{

$_mysqli->next_result();

$i++;        

}

}

if( $i == 4 )

{

//4.检查如果全部语句都执行成功,则提交

$_mysqli->commit();

echo '执行成功!';

}

else

{

//5.检查如果某一条SQL语句出错,则回滚,所有操作的影响都将取消

$_mysqli->rollback();

echo '第'.$i.'个SQL语句执行有误';

}

//6.设置开启自动提交数据

$_mysqli->autocommit(true);