十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
008. 数据库的数据查询
在和县等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都做网站、网站制作 网站设计制作定制网站开发,公司网站建设,企业网站建设,品牌网站制作,成都全网营销推广,外贸网站制作,和县网站建设费用合理。
本节课我们来了解一下数据库的数据查询方式,单数据、数据集和其它查询。
一.单数据查询
1. Db::table()中table必须指定完整数据表(包括前缀);
2. 如果希望只查询一条数据,可以使用find()方法,需指定where条件;
Db::table('tp_user')-where('id', 27)-find()
3. Db::getLastSql()方法,可以得到最近一条SQL查询的原生语句;
SELECT * FROM `tp_user` LIMIT 1
4. 没有查询到任何值,则返回null;
5. 使用findOrFail()方法同样可以查询一条数据,在没有数据时抛出一个异常;
Db::table('tp_user')-where('id', 1)-findOrFail()
6. 使用findOrEmpty()方法也可以查询一条数据,但在没有数据时返回一个空数组;
7. Db::table('tp_user')-where('id', 1)-findOrEmpty();
二.数据集查询
1. 想要获取多列数据,可以使用select()方法;
Db::table('tp_user')-select(); SELECT * FROM `tp_user`
2. 多列数据在查询不到任何数据时返回空数组,使用selectOrFail()抛出异常; Db::table('tp_user')-where('id', 1)-selectOrFail();
3. 在select()方法后再使用toArray()方法,可以将数据集对象转化为数组;
4. 当在数据库配置文件中设置了前缀,那么我们可以使用name()方法忽略前缀; Db::name('user')-select();
三.其它查询
1. 通过value()方法,可以查询指定字段的值(单个),没有数据返回null;
Db::name('user')-where('id', 27)-value('username');
$user = Db::table('tp_user')-select()-toArray(); dump($user);
2. 通过colunm()方法,可以查询指定列的值(多个),没有数据返回空数组; Db::name('user')-column('username');
3. 可以指定id作为列值的索引;
4. 如果处理的数据量巨大,成百上千那种,一次性读取有可能会导致内存开销过大;
5. 为了避免内存处理太多数据出错,可以使用chunk()方法分批处理数据;
6. 比如,每次只处理100条,处理完毕后,再读取100条继续处理;
7. 可以利用游标查询功能,可以大幅度减少海量数据的内存开销,它利用了PHP生成器特性。每次查询只读一行,然后再读取时,自动定位到下一行继续读取;
Db::name('user')-column('username', 'id');
Db::table('tp_user')-chunk(3, function($users) { foreach ($users as $user) {
dump($user);
}
echo 1; });
$cursor = Db::table('tp_user')-cursor(); foreach($cursor as $user){
dump($user);
}
mysqli有两种数据库连接方式:
1、面向过程式连接:
mysqli_connect('localhost','xxx','xxx','xxx');
mysqli_query('');
后使用mysqli_fetch_assoc方法获取到数据。
2、面向对象式连接:
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$result = $mysqli-query('');
后使用$result-fetch_assoc()获取数据。
至于num_rows是获取查询到的行数的方法。
php使用PDO抽象层获取查询结果,主要有三种方式:
(1)PDO::query()查询。
看下面这段php代码:
?php //PDO::query()查询
$res = $db-query('select * from user');
$res-setFetchMode(PDO::FETCH_NUM); //数字索引方式
while ($row = $res-fetch()){
print_r($row);
}
?
(2)PDO-exec()处理sql
?php //PDO-exec()处理sql
$db-setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$res = $db-exec("insert into user(id,name) values('','php点点通')");
echo $res;
?
(3)PDO::prepare()预处理执行查询
?php //PDO::prepare()预处理执行查询
$res = $db-prepare("select * from user");
$res-execute();
while ($row = $res-fetchAll()) {
print_r($row);
}
?
setAttribute() 方法是设置属性,常用参数如下:
PDO::CASE_LOWER -- 强制列名是小写
PDO::CASE_NATURAL -- 列名按照原始的方式
PDO::CASE_UPPER -- 强制列名为大写
setFetchMode方法来设置获取结果集的返回值的类型,常用参数如下:
PDO::FETCH_ASSOC -- 关联数组形式
PDO::FETCH_NUM -- 数字索引数组形式
PDO::FETCH_BOTH -- 两者数组形式都有,这是默认的
PDO::FETCH_OBJ -- 按照对象的形式,类似于以前的 mysql_fetch_object()
对上面总结如下:
查询操作主要是PDO::query()、PDO::exec()、PDO::prepare()。
PDO-query() — 处理一条SQL语句,并返回一个“PDOStatement”
PDO-exec() — 处理一条SQL语句,并返回所影响的条目数
PDO::prepare()主要是预处理操作,需要通过$rs-execute()来执行预处理里面的SQL语句
最后介绍两个常用的函数:
(1)fetchColumn()获取指定记录里一个字段结果,默认是第一个字段!
?php
$res = $db-query('select * from user');
//获取指定记录里第二个字段结果
$col = $res-fetchColumn(1);
echo $col;
?
(2)fetchAll(),从一个结果集中获取数据,然后存放在关联数组中
?php
$res = $db-query('select * from user');
$res_arr =$res-fetchAll();
print_r($res_arr);
?