yii2 如何使用数据库(一)之使用createCommand()

yii如何使用数据库

Yii通过数据库访问对象(Database Access Objects,简称DAO)来使用数据库。DAO是建立在 PDO 之上的,一套面向对象的方式来访问数据库的API。

接下来,我们从如何连接数据库,如何查询数据这些方面来学习DAO。

Yii如何链接数据库

  • 链接数据库的操作通常都放在配置文件中(如)
 'components' => [
        'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=demo',
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
        ],
  • 之后会建立一个yii\db\Connection对象,用该对象访问数据
  • 这个数据库的链接对象的写法:Yii::$app->db
  • 如需要链接其他数据库只需要改掉dsn(如)
 //'dsn' => 'sqlite:/path/to/database/file', // SQLite
//'dsn' => 'pgsql:host=localhost;port=5432;dbname=mydatabase', // PostgreSQL
//'dsn' => 'cubrid:dbname=demodb;host=localhost;port=33000', // CUBRID
//'dsn' => 'sqlsrv:Server=localhost;Database=mydatabase', // MS SQL Server, sqlsrv driver 
//'dsn' => 'dblib:host=localhost;dbname=mydatabase', // MS SQL Server, dblib driver
//'dsn' => 'mssql:host=localhost;dbname=mydatabase', // MS SQL Server, mssql driver
//'dsn' => 'oci:dbname=//localhost:1521/mydatabase', // Oracle
  • 如需连接多个数据库只需要在加入数据库连接即可(如)
   'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=demo',
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
        ],
   'db2' =>[

            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=demo1',
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',

   ]

查询数据

利用sql语句查询(yii\db\Command)

:我要查看文章状态的第一条语句:

$post = Yii::$app->db->createCommand("select from article_status")->queryOne();

$post 已数组的形式接受 。返回一个数据

优点

简单:此方法比较简单,只需要处理数组和sql语句即可
高校:使用Sql语句数据库处理起来十分方便

缺点

不安全:容易留下Sql注入的危险
不兼容:不同数据库使用的Sql语句不一样,不利于适用多种数据库

用法

Yii::$app->db->createCommand($sql = null)->各种方法

如何要执行非查询sql语句(例如INSERT,DELETE,UPDATE),需要调用execute()
例如:

Yii::$app->db->createCommand("insert into article_status value(10,'asda',5)")
              ->execute()

如果要执行需返回结果集的sql语句需要调用queryAll()、queryOne()、queryColumn()、query()或者queryScalar()
例如:

$post = Yii::$app->db->createCommand("select from article_status")->queryOne();

query(): 返回DataReader对象,并返回查询结果集

queryAll():返回所有结果集的所有,

queryOne():返回结果集的第一行数据

queryCoulum(): 返回结果集每一行的第一列元素

queryScalar(): 返回结果集中第一行第一列的值(如成功返回该值,失败则返回false)

支持绑定参数

bindParam(name, &value, dataType=null, length = null, $driverOptions = null)

Yii::$app->db->createCommand("select * from article_status where id=:id")->bindParam(":id",$name)->getRawSql();

得到sql语句(注意绑定参数后获取参数不能用getsql()要用getRawSql()函数)

string(39) "select * from article_status where id=1"

bindValue( name, value, $dataType = null) 绑定一个参数,直接写值不用变量

Yii::$app->db->createCommand("select * from article_status where id=:id")->bindValue(':id',1)->getRawSql()

bindValues($values) 绑定一堆参数(用数组形式)

Yii::$app->db->createCommand("select * from article_status where id=:id AND name = :name")->bindValues([':name'=>'ss',':id'=>1])->getRawSql();
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值