运行原生的SQL查询

一旦配置好数据库连接后,便可以使用 DB 对象运行查询。 DB 为每种类型的查询提供了方法: select,selectOne,update,insert,delete , cursor, statement, affectingStatement 和 unprepared。

运行查询语句

 $users = DB::select('select * from `user` where `status` = ?', [1]);  

select 方法将始终返回一个数组,数组中的每个结果都是一个 = StdClass 对象,可以像下面这样访问结果值:

foreach ($users as $user) {
    echo $user->name;
}

如果只是查询一条可用 selectOne 结果返回是一个 = StdClass 对象, 如果没有查询到数据返回是一个空的StdClass 对象。

    $sql= 'select * from `user` where `id` = ?';
    $res = DB::selectOne($sql, [1]);
    if ($res) {
        echo $res->name;
    }

如果你最快的方式遍历数据表所有数据 可用使用 DB::cursor($sql) 方法

    $sql= 'select * from `user`';
    $res = DB::cursor($sql);
    foreach($res as $user){
       echo $user->name;
    }

为什么说是最快的呢,因为底层采用 yield 机制获取数据 比 chunk 快很多

使用命名绑定

除了使用 ? 表示参数绑定外,你也可以使用命名绑定来执行一个查询:

$results = DB::select('select * from `user` where `id` = :id', ['id' => 1]);

运行插入语句

可以使用 DB Facade 的 insert 方法来执行 insert 语句。与 select 一样,该方法将原生 SQL 查询作为其第一个参数,并将绑定数据作为第二个参数:

DB::insert('insert into users (`id`, `name`) values (?, ?)', [1, 'sumi']);

运行更新语句

update 方法用于更新数据库中现有的记录。该方法返回受该语句影响的行数:

$affected = DB::update('update `user` set `status` = 2 where `name` = ?', ['ovo']);

运行删除语句

delete 方法用于从数据库中删除记录。与 update 一样,返回受该语句影响的行数:

$deleted = DB::delete('delete from `users`');

运行普通语句

有些数据库语句不会有任何返回值。对于这些语句,你可以使用 DB 的 statement 方法来运行:

DB::statement('drop table `user`');

有些数据库语句如果你想知道执行是否有成功。对于这些语句,你可以使用 DB 的 unprepared 方法来运行:

$unprepared = DB::unprepared('DROP TRIGGER IF EXISTS `sync_to_item_table`');
if ($unprepared) {
    // Todo something...
}
/docs/2.x/zh-CN/db/origin.html
progress-bar