yii2 如何使用数据库(一)之使用createCommand()
- yii如何使用数据库
- Yii如何链接数据库
- 查询数据
- 利用sql语句查询yiidbCommand
- 优点
- 缺点
- 用法
- 利用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,
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(
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();
- 上一篇:没有了
- 下一篇: 【学习笔记】thinkphp 生成静态缓存的雪崩问题