先使用SQL创建表,并向表中插入数据
create table contactInfo(
uid mediumint(8)
unsigned NOT NULL AUTO_INCREMENT, #联系人ID
name varchar(50) NOT NULL, #姓名
deparmentId char(3) NOT NULL, #部门编号
address varchar(80) NOT NULL, #联系地址
phone varchar(20), #联系电话
email varchar(100), #联系人的电子邮件
PRIMARY KEY(uid) #设置用户ID(即uid)为主键
);
fetch_row()、fetch_array()、fetch_assoc()、fetch_object()这个四个函数以相似的方法来依次读取结果数据行。它们只在引用字段的方式上有差别
它们的共同点:每次调用将自动返回下一条结果记录,如果已经到达结果数据表的末尾,返回false
1、$result->fetch_row()
从结果集中获取一条结果记录,将值存放在一个索引数组中,是四个方法中最方便的一个。
各个字段需要以$row[$n]的方式读取,其中$row是从结果集中获取的一行记录返回的数组,$n为连续的整数下标。
因为返回的是索引数组,所以还可以和list()函数结合在一起使用。
<?php
$mysqli=new mysqli("localhost","mysql_user","mysql_pwd","my_db_name");
if(mysqli_connect_errno()){
printf("连接失败:%s<br>",mysqli_connect_error());
exit();
}
$mysqli->query(‘set names gb2312‘); //设置字符集为国标2312码
/*将部门编号为D01的联系人姓名和电子邮件全部取出存入到结果集中*/
$result=$mysqli->query("SELECT name,email FROM contactInfo WHERE departmentId=‘D01‘");
echo ‘D01部门的联系人姓名和电子邮件:‘;
echo ‘<ol>‘;
while(list($name,$email)=$result->fetch_row()){
echo ‘<li>‘.$name:$email.‘</li>‘;
}
echo ‘</ol>‘;
?>
2、$result->fetch_assoc()
该方法将以一个关联数组的形式返回一条结果记录,数据的字段名表示键,字段内容表示值。
<?php
$mysqli=new mysqli(‘localhost‘,‘mysql_user‘,‘mysql_pwd‘,‘my_db_name‘);
if(mysqli_connect_errno()){
printf("连接失败:%s<br>",mysqli_connect_error());
exit();
}
$mysqli->query(‘set names gb2312‘);
$result=mysqli->query(‘SELECT * FROM contactInfo‘);
echo ‘<table widht="90%" border="1" align="center">‘;
echo ‘<caption><h1>联系人信息表</h1></caption>‘
//<caption>标签提供了表格的简述,有可能是用于让搜索引擎更容易找到
echo ‘<th>用户ID</th><th>姓名</th><th>部门编号</th><th>联系地址</th><th>联系电话</th><th>电子邮件</th>‘;
while($row=$result->fetch_assoc()){
//注意$result->fetch_accoc()是返回关联数组,即使用$key_name(键值)访问数值
echo ‘<tr align="cneter">‘;
echo ‘<td>‘.$row[‘uid‘].‘</td>‘;
echo ‘<td>‘.$row[‘name‘].‘</td>‘;
echo ‘<td>‘.$row[‘departmentId‘].‘</td>‘;
echo ‘<td>‘.$row[‘address‘].‘</td>‘;
echo ‘<td>‘.$row[‘phone‘].‘</td>‘;
echo ‘<td>‘.$row[‘email‘].‘</td>‘;
echo ‘</tr>‘;
}
echo ‘</table>‘;
$result->close();
$mysqli->close();
?>
3、$result->fetch_array()
该方法可以说是fetch()_row和fetch_assco()两个方法的结合版本,可以将结果集的各条记录获取为一个关联数组或数值索引数组,或者同时获取为关联数组和索引数组。默认情况,会同时获取这两种数组。可以通过在该方法传入如下不同的值来修改这种默认行为。
MYSQLI_ASSOC :记录被作为关联数组返回,字段名为键,字段内容为值。
MYSQLI_NUM :记录被作为索引数组返回,按查询中指定的字段名顺序排序。
MYSQLI_BOTH :这是默认值,记录即作为关联数组又作为索引数组返回。
4、$result->fetch_object()
该方法与前面三个方法不同,它将以一个对象的形式返回一条结果记录,而不是数组。它的各个字段需要以对象的方式进行访问,数据列的名字区分字母大小写情况。
<?php
$mysqli=new mysqli("localhost","mysql_user","mysql_pwd","my_db_name");
if(mysqli_connect_errno()){
printf("连接失败:%s<br>",mysqli_connect_error());
exit();
}
$mysqli->query("set names gb2312");
$mysqli->query("SELECT * FROM contactInfo");
echo ‘<table width="%90" border="1" align="center">‘;
echo ‘<caption><h1>联系人信息表</h1></caption>‘
;
echo ‘<th>用户ID</th><th>姓名</th><th>部门编号</th><th>联系地址</th><th>联系电话</th><th>电子邮件</th>‘;
while($rowObj=$result->fetch_object()){
echo ‘<tr align="center">‘;
echo ‘<td>‘.$rowObj->uid.‘</td>‘;
echo ‘<td>‘.$rowObj->name.‘</td>‘;
echo ‘<td>‘.$rowObj->deparmentId.‘</td>‘;
echo ‘<td>‘.$rowObj->address.‘</td>‘;
echo ‘<td>‘.$rowObj->phone.‘</td>‘;
echo ‘<td>‘.$rowObj->email.‘</td>‘;
echo ‘</tr>‘;
}
echo ‘</table>‘
$result->close();
$mysqli->close();
?>
以上四个结果集中遍历数据的方法,每次调用都将自动返回下一条结果记录。如果想改变这个读取的顺序,可以使用结果集对象中的data_seek()方法明确地改变当前记录位置。还可以使用结果集对象中的num_rows属性,给出结果数据表里的记录个数。还可以使用结果对象中的lengths属性返回一个组,该数组的各个元素是使用以上四个方法最后读取结果记录中各字段里的字符个数。