您好,欢迎访问一九零五行业门户网

Yii 11.17 数据库相关操作说明

这篇文章介绍的内容是关于yii 11.17 数据库相关操作说明 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
示例:
$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;
#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 框架的详情
yii 多应用多模块
yii2配置基本概念
以上就是yii 11.17 数据库相关操作说明的详细内容。
其它类似信息

推荐信息