$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. linux dsp 播放音频文件

    #include <unistd.h> #include <fcntl.h> #include <sys/types.h> #include <sys/ioc ...

  2. 两个学生OJ差集

    这个程序非常简单,因为用了最笨的办法,不过运行一点儿也不慢... 在我们学校OJ平台每个人的个人信息中都有Solved Problems List,我们可以用这个简单的程序输入两个人解决问题的所有题号 ...

  3. [HDOJ1078]FatMouse and Cheese(记忆化搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1078 题意:给出n, k,然后给出n*n的地图,(下标0~n-1),有一只老鼠从(0,0)处出发,只能 ...

  4. leetcode:Unique Binary Search Trees

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...

  5. HDFS的java操作方式

    1.RPC 1.1 RPC (remote procedure call)远程过程调用. 远程过程指的是不是同一个进程. 1.2 RPC至少有两个过程.调用方(client),被调用方(server) ...

  6. B/S 和 C/S

    B/S最大优势为客户端免维护,适用于用户群庞大,或客户需求经长发生变化的情况. C/S功能强大,可以减轻服务器端压力,如果用户的需求特别复杂,用C/S. 全面: Client/Server是建立在局域 ...

  7. iOS富文本(三)深入使用Text Kit

    在上一篇中介绍了Text Kit的三种基本组件的关系并且简单的实现了怎么使用这三种基本组件,本片将深入的去使用这三种基本组件. NSTextStorage NSTextStorage是NSMutabl ...

  8. 51nod1434 区间LCM

    将n!标准分解.m!/n!必定需要包含n!的分解式.对于每个质数枚举最小的答案,然后总的取最大. #include<cstdio> #include<cstring> #inc ...

  9. 打印Dom对象的所有属性和方法

    <html> <head> <title>Test</title> <meta http-equiv="Content-Type&quo ...

  10. 09day1

    词编码 模拟 [问题描述] 一个发送机可以通过一条隧道发送一些以二进制代码组成的单词.在其尽头的接受机可以使用特殊技术恢复到最初的单词.每个单词最初都由0和1组成.所有的单词最初长度都为n(4< ...