Yii 里面直接执行sql语句

Yii 自带了丰富的功能 ,包括 MVCDAO/ActiveRecordI18N/L10N缓存身份验证基于角色的访问控制脚手架测试等,可显著缩短开发时间。

Yii里面的 DAO/ActiveRecord 已经很方便我们进行数据库的操作,但有些时候还需要自己写一些 sql 语句去查询等。在 Yii 里面可以通过以下方式直接执行 sql 语句:

在此之前需要在 config/main.php 里面配置数据相关信息:

'db'=>array(
   'class' => 'CDbConnection',
   'connectionString' => 'mysql:host=127.0.0.1;port=3607;dbname=dbname',
   'emulatePrepare' => true,
   'username' => 'root',
   'password' => 'mysql',
   'charset' => 'utf8',
   'tablePrefix'=>'pf_',
  ),

然后再通过 Yii::app()->db 进行调用。

方式一:

$db = Yii::app()->db;
$sql = "SELECT * FROM `news` ORDER BY id DESC";
$command = $db->createCommand($sql);
$result = $command->queryAll();
print_r($result);

方式二:

$db = Yii::app()->db;
$sql = "select sum(if(starttime>'09:00:00',1,0)) as late,sum(if(endtime<'18:00:00',1,0)) as early from present where userid=:userid and date between :date_start and :date_end";
$results = $db->createCommand($sql)->query(array(
  ':userid' => 115,':date_start'=>'2009-12-1',':date_end'=>'2009-12-31',
));
foreach($results as $result){
  echo $result['late']," and ",$result['early']," /n";
}

方式三:

$sql = "select sum(if(starttime>'09:00:00',1,0)) as late,sum(if(endtime<'18:00:00',1,0)) as early from present where userid=115 and date between '2009-12-1' and '2009-12-31'";
$results = $db->createCommand($sql)->query();
foreach($results as $result){
  echo $result['late']," and ",$result['early']," /n";
}

方式四:

$db = Yii::app()->db;
$oCommand = $db->createCommand('SELECT * FROM news WHERE title = :title');
$oCommand->bindParam(':title', $title, PDO::PARAM_STR);
$result = $oCommand->queryAll();
print_r($result);

说明:把查询条件作为参数(如方式二),比较安全,可直接避免注入。要是直接用在 SQL 语句中,最好要经过防注入处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值