我正在使用http://www.yiiframework.com/doc/guide/1.1/en/database.dao
数据访问对象(DAO)使用PDO。
不确定哪个是最好的
选项一 - 内联代码
$alias_name =Utils::checkEnteredData($alias_name);
$connection = Yii::app()->db;
$sql_images = $connection->createCommand("SELECT ig.id,
ig.is_flickr,
ig.main_image,
ig.author_id,
ig.description,
ig.latitude,
ig.longitude,
ig.is_youtube,
ig.author_id,
ig.flickr_youtube_id,
ig.thumbnail_image_medium,
ig.thumbnail_image,
ig.alias_title,
ig.image_hits,
ig.title,
ig.created_on,
a.title,
a.alias_title as album_alias_title,
igo.realname,
igo.username,
igo.location from image_gallery ig
JOIN album a ON ig.album_id = a.id
LEFT JOIN image_gallery_owner igo ON ig.author_id = igo.id
WHERE ig.approved =:approved AND ig.visible=:visible AND ig.alias_title =:alias_title LIMIT 1");
$sql_images->bindValues(array(':alias_title'=>$alias_name, ':approved'=>'Yes', ':visible'=>'1'));
$image = $sql_images->queryAll();
选项2存储过程:
public function getImageFromAliasTitle($alias_title)
{
$alias_title =Utils::checkEnteredData($alias_title);
$connection = Yii::app()->db;
$command = $connection->createCommand("CALL getSingleImage(:alias_title)");
$command->bindParam(":alias_title",$alias_title,PDO::PARAM_STR);
$image = $command->queryAll();
return $image;
}
答案 0 :(得分:0)
这取决于,但我仍然建议您使用存储过程。主要原因是(取自previous answer):
存储过程具有无需授予用户直接表访问权限的好处。
由于每个非参数化查询都是对SQL Server的新的不同查询,因此必须针对每个查询执行确定执行计划的所有步骤(从而浪费时间 - 并且还浪费计划缓存空间) ,因为将执行计划存储到计划缓存中最终并没有真正帮助,因为该特定查询可能不会再次执行)
非参数化查询存在SQL注入攻击的风险,应该不惜一切代价避免。
This也是一本有趣的读物。