入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

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

创建时间:2017-11-12 投稿人: 浏览次数:1978

  • yii如何使用数据库
  • Yii如何链接数据库
  • 查询数据
    • 利用sql语句查询yiidbCommand
      • 优点
      • 缺点
      • 用法

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

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

  • 链接数据库的操作通常都放在配置文件中(如)
 "components" => [
        "db" => [
            "class" => "yiidbConnection",
            "dsn" => "mysql:host=localhost;dbname=demo",
            "username" => "root",
            "password" => "",
            "charset" => "utf8",
        ],
  • 之后会建立一个yiidbConnection对象,用该对象访问数据
  • 这个数据库的链接对象的写法: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" => "yiidbConnection",
            "dsn" => "mysql:host=localhost;dbname=demo",
            "username" => "root",
            "password" => "",
            "charset" => "utf8",
        ],
   "db2" =>[

            "class" => "yiidbConnection",
            "dsn" => "mysql:host=localhost;dbname=demo1",
            "username" => "root",
            "password" => "",
            "charset" => "utf8",

   ]

利用sql语句查询(yiidbCommand)

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

$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();
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。