数据库入门之运行原始 SQL 查找

一旦你设置好了数据库连接,就可以使用 DB facade 来进行查找。DB facade 提供每个类型的查找方法:select、update、insert、delete、statement。下面兄弟连帮你一一介绍。

运行一个 Select 查找#

在 DB facade 中使用 select 可以运行一个基本的查找:

<?php

namespace App\Http\Controllers;

use DB;

use App\Http\Controllers\Controller;

class UserController extends Controller

{

/**

* 显示应用程序中所有用户的列表。

*

* @return Response

*/

public function index()

{

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

return view('user.index', ['users' => $users]);

}

}

传递给 select 方法的第一个参数是原始的 SQL 查找,而第二个参数是任何查找所需要的参数绑定。通常,这些都是 where 语句的限定值。参数绑定主要是为了防止 SQL 注入。

select 方法总会返回结果的数组数据。数组中的每个结果都是一个 PHP StdClass 对象,这使你能够访问到结果的值:

foreach ($users as $user) {

echo $user->name;

}

使用命名绑定#

除了使用 ? 来表示你的参数绑定外,你也可以使用命名绑定运行查找:

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

运行 Insert#

若要运行 insert 语法,则可以在 DB facade 使用 insert 方法。如同 select 一样,这个方法的第一个参数是原始的 SQL 查找,第二个参数则是绑定:

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

运行 Update#

update 方法用于更新已经存在于数据库的记录。该方法会返回此声明所影响的行数:

$affected = DB::update('update users set votes = 100 where name = ?', ['John']);

运行 Delete#

delete 方法用于删除已经存在于数据库的记录。如同 update 一样,删除的行数将会被返回:

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

运行一般声明#

有时候一些数据库操作不应该返回任何参数。对于这种类型的操作,你可以在 DB facade 使用 statement 方法:

DB::statement('drop table users');

监听查找事件#

如果你希望能够监控到程序执行的每一条 SQL 语句,则可以使用 listen 方法。这个方法对于纪录查找跟调试将非常有用。你可以在 服务容器 中注册你的查找侦听器:

<?php

namespace App\Providers;

use DB;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider

{

/**

* 启动任何应用程序的服务。

*

* @return void

*/

public function boot()

{

DB::listen(function($sql, $bindings, $time) {

//

});

}

/**

* 注册一个服务提供者。

*

* @return void

*/

public function register()

{

//

}

}

数据库入门之运行原始 SQL 查找的更多相关文章

  1. 【数据库】数据库入门(三): SQL

    SQL: 结构化查询语言(Structured Query Language) SQL 是由 IBM 公司首先开发产生,它是关系型数据库最早出现的商用语言之一.1974年,IBM 公司 San Jos ...

  2. 06 数据库入门学习-视图、sql注入、事务、存储过程

    一.视图 1.什么是视图 视图本质是一张虚拟的表 2.为什么要用 为了原表的安全 只要有两大功能 1.隐藏部分数据,开放指定数据 2.视图可以将查询结果保存,减少sql语句的次数 特点: 1.视图使用 ...

  3. 【数据库】数据库入门(四): SQL查询 - SELETE的进阶使用

    集合操作常用的集合操作主要有三种:UNION(联合集).INTERSECT(交叉集).EXCEPT(求差集).以上三种集合的操作都是直接作用在两个或者多个 SQL 查询语句之间,将所有的元组按照特定的 ...

  4. SQL查找数据库中所有没有主键的数据表脚本

    --SQL查找数据库中所有没有主键的数据表脚本 --运行脚本后在消息中可能会显示下面现象中的一种:--(1)数据库中所有数据表都有主键(则证明所有数据表都有主键)--(2)当前数据表[数据表名]没有主 ...

  5. 结论: blocking_query 是当前堵塞其他会话正在运行的SQL.而不是原始堵塞SQL

    查看当前session线程号 mysql> select connection_id(); +-----------------+ | connection_id() | +---------- ...

  6. mybatis查询无结果, 数据库运行相同sql查询出结果

    一.问题描述 mybatis查询无结果, 数据库运行相同sql查询出结果, 如下 这是数据库记录 这是mybatis查询出的结果, 记录条数0 这是直接将控制台一模一样的sql查询语句放到Navica ...

  7. 根据请求号(request ID)查找正在运行的sql

    --下面的SQL可以根据Request ID找到对应的Session信息: select * from v$session where paddr in (select addr from v$pro ...

  8. 数据库每分钟运行监控SQL

    每1分钟运行一次,记录正在运行的SQL,监控数据 放在ReportServer库的t_WhoIsActive表中,保留最近30天的数据! USE [ReportServer] GO /****** O ...

  9. Laravel5.1 数据库--DB运行原生SQL

    Laravel操作数据库有三种:DB原生SQL.构建器.Model.这三种依情况而决定使用哪种更合适. 那么今儿咱就从DB原生SQL说起: 1 用DB门面原生SQL语句操作 用DB门面操作的话呢 无非 ...

随机推荐

  1. java网络编程(1)

    太久没有用java做一些东西了,搞太多的协议框架,基本的东西好像快忘记了~每天抽出一点时间出来,来好好温习下基础,顺便记录下来,以后还忘记可以回来看看==.首先从网络编程开始吧==.这玩意太久没有用了 ...

  2. day6(列表操作、列表练习题)

    一.列表操作 a) 循环 基本语法 for i in  value : L1 =['a','b','c','d',1,2,3,4,5,6,'b','D'] for i in L1: print(i) ...

  3. word自动备份,word误删内容恢复

    有个问题时长困扰着我,就是一次不小心把word里面的一部分内容误删了之后,又手残点击ctrl+s给保存了,要是立即ctrl+z还能撤销,可要是关闭了word才想起来撤销就来不及啦,现在终于找到解决的办 ...

  4. Ffmpeg简介

    http://www.ffmpeg.com.cn/index.php/%E9%A6%96%E9%A1%B5 FFmpeg is a complete solution to record, conve ...

  5. 手把手教你在Windows环境下升级R

    在Windows环境下,我们可以使用installr包自动将R升级到最新版本.并且可以安装软件.下面主要演示如何在Windows环境下升级R,并将旧版本安装的R包复制到更新版本的R. 1.加载inst ...

  6. 嵌入式 视频编码(H264)

    这几天在编写视频录制模块,所以,闲暇之余,又粗粗的整理了一下,主要是API,以备不时之用    摄像头获取的模拟信号通过经芯片处理(我们使用的是CX25825),将模拟信号转成数字信号,产生标准的IT ...

  7. thinkphp中使用phpexcel读取所有的行记录

    ThinkPHP3.2使用phpexcle 将phpexcel放到Think\Org\PHPExcel中 public function index() { import('Org.PHPExcel. ...

  8. Java获取当前的年月

    今天,我在尝试从数据库取数据的过程中,发现页面初始化时需要给时间控件赋初值.于是,我就写了一个获取当前年月的时间工具类. 1.具体源码如下: YearAndMonth.java: /** * @Tit ...

  9. Flex中的FusionCharts 2D面积图

    Flex中的FusionCharts 2D面积图 1.源码 <?xml version="1.0" encoding="utf-8"?> <s ...

  10. java.lang.NumberFormatException

    1.错误描述 Exception in thread "main" java.lang.NumberFormatException: For input string: " ...