$result = array(
'id'=>null,
'val'=>0
);
$row1 = Yii::app()->db->createCommand()->insert('test1', $result);
$id = Yii::app()->db->getLastInsertID();
$row2 = Yii::app()->db->createCommand()->update('test1', array('val'=>$id) , 'id=:id',array(':id'=>$id));
echo $id;
exit;
<?php
#1. 建立数据库连接 可以使用 try...catch 捕获可能抛出的异常
#$connection=new CDbConnection($dsn,$username,$password);
# DSN格式
# SQLite: sqlite:/path/to/dbfile
# MySQL: mysql:host=localhost;dbname=testdb
# PostgreSQL: pgsql:host=localhost;port=5432;dbname=testdb
# SQL Server: mssql:host=localhost;dbname=testdb
# Oracle: oci:dbname=//localhost:1521/testdb
#在配置文件里面修改别名
#array(
# 'components'=>array(
# 'db'=>array(
# 'class'=>'CDbConnection',
# 'connectionString'=>'mysql:host=localhost;dbname=testdb',
# 'username'=>'root',
# 'password'=>'password',
# 'emulatePrepare'=>true, // needed by some MySQL installations
# ),
# ),
#)
#然后使用这种方式来建立连接 #然后我们就可以通过
$connection = Yii::app()->db
#访问数据库连接了。它已经被自动激活了,除非我们特意配置了
#CDbConnection::autoConnect 为 false。
# 通过这种方式,这个单独的DB连接就可以在我们代码中的很多地方共享。
# 如果没有,你可能需要显式建立一个连接:
# $connection=new CDbConnection($dsn,$username,$password);
#$connection->active=true; # 建立链接之后active为true;
$connection->active=false; # 关闭连接
#运行SQL
$command=$connection->createCommand($sql);
#SQL修改
$command->text = $newSQL;
#########################################################
#execute()方法用来执行 INSERT, UPDATE 和 DELETE 。如果成功,它将返回此执行所影响的行数。
#query() 方法执行一条会返回若干行数据的 SQL 语句,例如 SELECT。
#如果成功,它将返回一个CDbDataReader 实例,通过此实例可以遍历数据的结果行。
#为简便起见, (Yii)还实现了一系列 queryXXX() 方法以直接返回查询结果
#如果SQL发生错误,将会抛出一个异常。.
$rowCount = $command->execute(); # 执行无查询 SQL
$dataReader = $command->query(); # 执行一个 SQL 查询
$rows = $command->queryAll(); # 查询并返回结果中的所有行
$row = $command->queryRow(); # 查询并返回结果中的第一行
$column = $command->queryColumn(); # 查询并返回结果中的第一列
$value = $command->queryScalar(); # 查询并返回结果中第一行的第一个字段
#########################################################
#获取查询结果
#在生成 CDbDataReader后
#重复调用 CDbDataReader::read()
#也可以在 foreach 语言结构中使用 CDbDataReader ####例如####
$dataReader = $command->query(); #方法1 重复调用 read() 直到它返回 false
while( ($row = $dataReader->read()) !== false) { ... }
#方法2 使用 foreach 遍历数据中的每一行
foreach($dataReader as $row) { ... }
#方法3 一次性提取所有行到一个数组
$rows = $dataReader->readAll(); #注意:
#所有的 queryXXX() 方法会直接返回数据
#query()却不会,返回的是一个CDbDataReader 的实例 #使用事务
$transaction= $connection->beginTransaction();
try
{
$connection->createCommand($sql1)->execute();
$connection->createCommand($sql2)->execute();
#其他
$transaction->commit();
}
catch(Exception $e) # 如果有一条查询失败,则会抛出异常
{
$transaction->rollBack(); #回滚
} ######################################################### #预处理(参数绑定) 避免注入 提高重复执行的效率
#占位符可以是命名的 (表现为一个唯一的标记) 或未命名的 (表现为一个问号)。占位符将被替换为实际的参数。
#调用 CDbCommand::bindParam() 或 CDbCommand::bindValue() 以使用实际参数替换这些占位符。
#这些参数不需要使用引号引起来:底层的数据库驱动会为你搞定这个参数绑定必须在 SQL 语句执行之前完成。
##例
#一条带有两个占位符 ":username" 和 ":email"的 SQL $sql="INSERT INTO tbl_user (username, email) VALUES(:username,:email)";
$command = $connection->createCommand($sql); #用实际的用户名替换占位符 ":username"
$command->bindParam(":username",$username,PDO::PARAM_STR); #用实际的 Email 替换占位符 ":email"
$command->bindParam(":email",$email,PDO::PARAM_STR);
$command->execute(); #重复执行同一个逻辑的时候
#使用新的参数集插入另一行
$command->bindParam(":username",$username2,PDO::PARAM_STR);
$command->bindParam(":email",$email2,PDO::PARAM_STR);
$command->execute();
#bindParam() 和 bindValue() 非常相似。
#唯一的区别就是前者使用一个 PHP 变量绑定参数,
#而后者使用一个值。对于那些内存中的大数据块参数,处于性能的考虑,应优先使用前者。
#########################################################
#绑定列
$sql="SELECT username, email FROM tbl_user";
$dataReader=$connection->createCommand($sql)->query();
#使用 $username 变量绑定第一列 (username)
$dataReader->bindColumn(1,$username);
#使用 $email 变量绑定第二列 (email)
$dataReader->bindColumn(2,$email);
while($dataReader->read()!==false)
{
#$username 和 $email 含有当前行中的 username 和 email
#这里就不用每次都给两个变量赋值了
}
#########################################################
#使用表前缀
#配置 CDbConnection::tablePrefix 属性为所希望的表前缀。
#array(
# 'components'=>array(
# 'db'=>array(
# 'class'=>'CDbConnection',
# 'connectionString'=>'mysql:host=localhost;dbname=testdb',
# 'username'=>'root',
# 'password'=>'password',
# 'emulatePrepare'=>true, // needed by some MySQL installations
# 'tablePrefix'=>"表前缀_"
# ),
# ),
#)
$sql='SELECT * FROM {{user}}';
$users=$connection->createCommand($sql)->queryAll(); ###################### $user = Yii::app()->db->createCommand()
->select('username, password')
->from('tbl_user')
->where('id=:id', array(':id'=>1))
->queryRow(); where() 方法 (可用自 v1.1.6)
public CDbCommand where(mixed $conditions, array $params=array ( )) $conditions mixed 放在WHERE部分的条件。
$params array 绑定到此查询的参数 (name=>value)
{return} CDbCommand 返回此命令对象本身 设置查询的WHERE。 这个方法要求一个 $conditions 参数和一个 $params 参数, 指定值绑定到查询。 $conditions 参数可以是一个字符串(例如 'id=1')或一个数组。 如果是后者,它必须是这种格式 array(operator, operand1, operand2, ...), 操作符可以是下面当中的一个,可能的操作数依赖于相应的操作符 : and: 操作数应该使用AND连接起来。例如, array('and', 'id=1', 'id=2') 将生成 'id=1 AND id=2'。如果一个操作数是一个数组, 它将被使用这里描述的相同规则转换成一个字符串。例如, array('and', 'type=1', array('or', 'id=1', 'id=2')) 将生成 'type=1 AND (id=1 OR id=2)'。 该方法将不做任何引用或转义。
or: 和 and 操作符相似,除了操作数是使用OR连接起来。
in: 操作数1应该是一列或DB表达式,操作数2应该是一个数组, 表示相应的列的值或DB表达式应该在的范围。例如, array('in', 'id', array(1,2,3)) 将生成 'id IN (1,2,3)'. 这个方法将正确的引用列名和范围中的转义值。
not in: 和 in 相似,除了在生成条件时把IN替换成NOT IN.
like: 操作数1应该是一列或一个DB表达式,操作数2是一个字符串或一个数组 表示列或DB表达式应该like的值。 例如, array('like', 'name', '%tester%') 将生成 "name LIKE '%tester%'". 当值范围被给定为一个数组,多个LIKE谓语将被生成并使用AND连接起来。 例如, array('like', 'name', array('%test%', '%sample%')) 将生成 "name LIKE '%test%' AND name LIKE '%sample%'". 这个方法将正确的引用列名和范围中的转义值。
not like: 和 like相似,除了在生成条件时使用NOT LIKE替换LIKE。
or like: 和 like相似,除了OR被用作把LIKE谓语连接起来。
or not like: 和 not like相似,除了OR被用作把NOT LIKE谓语连接起来。

Yii 1 数据库操作 笔记的更多相关文章

  1. Oracle11g数据库导入Oracle10g数据库操作笔记

    一.在11g服务器上,使用expdp命令备份数据 EXPDP USERID='SYS/sys@daggis as sysdba' schemas=oa directory=DATA_PUMP_DIR ...

  2. Mysql数据库操作笔记

     如果数据库表字段存在,则删除该表 drop table if exists `table_name` 创建数据库表语句 create table `table_name`( `id` ) not n ...

  3. Yii 2.0 数据库操作总结

    1. 概述 操作数据库有2种方式: DAO(data access object),不安全 ORM(onject relational mapping) 2. DAO Yii::app()->d ...

  4. MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  5. YII数据库操作(CURD操作)

    数据库操作 获得模型对象 $model = 模型名::model();或$model = new 模型名(); 1.查询多条记录(返回值:二维数组) $result = $model->find ...

  6. Flas-SQLAchemy数据库操作使用学习笔记

    Flas-SQLAchemy数据库操作使用学习笔记 Flask-SQLALchemy 是一个给你的应用添加 SQLALchemy 支持的 Flask 扩展.SQLALchemy 是Python语言的S ...

  7. golang学习笔记16 beego orm 数据库操作

    golang学习笔记16 beego orm 数据库操作 beego ORM 是一个强大的 Go 语言 ORM 框架.她的灵感主要来自 Django ORM 和 SQLAlchemy. 目前该框架仍处 ...

  8. Yii框架2.0 数据库操作初接触

    Yii2.0和Yii1.1版本的变动还是挺多的,我发现配置文件有许多不同,Yii1.1版本里有个main.php 好多信息是在这里配置的,比如默认控制器,数据库连接信息:Yii的数据库配置被单独拿出来 ...

  9. Python学习笔记:sqlite3(sqlite数据库操作)

    对于数据库的操作,Python中可以通过下载一些对应的三方插件和对应的数据库来实现数据库的操作,但是这样不免使得Python程序变得更加复杂了.如果只是想要使用数据库,又不想下载一些不必要的插件和辅助 ...

随机推荐

  1. Ext.grid.plugin.RowExpander的简单用法

    有时候,我们在grid里渲染数据时,由于某些字段的内容太长,而grid又不会自动出现滚动条,于是溢出的内容后面就会出现省略号, 导致信息展示不完全.如果,这个信息不太重要,展示不完全也无关紧要.可是, ...

  2. [CFgym101061C]Ramzi(贪心,双条件最短路)

    题目链接:http://codeforces.com/gym/101061/problem/C 题意:一张图,图上的边有两种,一种是车道,一种是人行道.一个人要从A点到B点,可以坐车也可以走人行道.这 ...

  3. STL笔记(2) STL之父访谈录

    年3月,dr.dobb's journal特约记者, 著名技术书籍作家al stevens采访了stl创始人alexander stepanov. 这份访谈纪录是迄今为止对于stl发展历史的最完备介绍 ...

  4. 【转载】两军问题与Paxos算法 & 动画讲解Paxos算法

    http://harry.me/blog/2014/12/27/neat-algorithms-paxos/ 这篇文章里面有用JS写的Paxos过程,有助理解.但是没怎么仔细看,没时间. 这篇文章用两 ...

  5. BZOJ 3083 - 遥远的国度

    原题地址:http://www.lydsy.com/JudgeOnline/problem.php?id=3083 说话间又一个多月过去了..该来除除草了,每天都是训练.没效率,训练.没效率..省选考 ...

  6. HTTP全部报文首部字段

    总结了一下HTTP各种报文首部字段. HTTP报文类型与结构 HTTP报文结构 报文首部 空行(CR+LF) 报文主体 HTTP报文类型 http有两种类型报文,请求报文和响应报文两种报文的首部结构如 ...

  7. Intellij IDEA13 创建多模块Maven项目

    目标:构建一个类似于如下图所示的这种结构的Maven项目. 首先,需要选中“File”——>“New Project”如下图所示 选中“Maven”,设置项目名称与项目构建地址,点击“Next” ...

  8. UVa 101 The Blocks Problem

    题意:给出从左到右放置的n块木块(从0开始编号),再给出四种操作,再给出相应的操作,输出操作结束后每一堆木块的情况. 学习的紫书,因为每一堆的木块数是在发生变化的,所以用vector. 然后就是模拟几 ...

  9. codevs 4919 线段树练习4

    线段树水题.我是ziliuziliu,我是最强的#include<iostream> #include<cstdio> #include<cstring> #inc ...

  10. [反汇编练习] 160个CrackMe之022

    [反汇编练习] 160个CrackMe之022. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...