一.连接数据库
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].'
';
}
2.2:将结果集包装成关联数组
//$_row = $_result->fetch_assoc();
while(!!$_row = $_result->fetch_assoc())
{
echo $_row['name'].'
';
}
2.3:将结果集包装成数组(索引+关联),速度会比较慢
//$_row = $_result->fetch_array();
while(!!$_row = $_result->fetch_array())
{
echo $_row[1].'
';
echo $_row['name'].'
';
}
2.4:将结果集包装成对象
//$_row = $_result->fetch_object();
while(!!$_row = $_result->fetch_object())
{
echo $_row->name.'
';
//结果中的字段名字,其实是对象中的属性的名字
}
七.关于结果集的属性或方法
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.'
';
}
4.获取所有字段
$_fields = $_result->fetch_fields();//数组
foreach($_fields as $_field)
{
echo $_field->name.'
';
}
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);