14-15.Yii2.0模型的创建/读取数据使用,框架防止sql注入
[TOC]
创建数据库 表article
1.创建库表
CREATE TABLE `article` (
`article_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'article_id',
`article_title` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`article_id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
2.添加几条数据供测试用
配置 db.php
连接数据库
D:\phpStudy\WWW\yii\config\db.php
return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=114.67.230.000;dbname=yii',
'username' => 'root',
'password' => '000000',
'charset' => 'utf8',
// Schema cache options (for production environment)
//'enableSchemaCache' => true,
//'schemaCacheDuration' => 60,
//'schemaCache' => 'cache',
];
创建控制器 HomeController.php
D:\phpStudy\WWW\yii\controllers\HomeController.php
<?php
/**
* Created by Haima.
* Author:Haima
* QQ:228654416
* Date: 2018/9/3
* Time: 10:30
*/
namespace app\controllers;
use app\models\Article;
use yii\base\Controller;
class HomeController extends Controller
{
//用属性的方法定义父模板
//会自动加载D:\phpStudy\WWW\yii\views\layouts\home.php文件
public $layout = 'home';
public function actionIndex()
{
$request = \Yii::$app->request;
// 方法一:普通的查询方式(会有SQL注入的危险)
// $article_id = $request->get('article_id',1);
// $sql = 'select * from article where article_id =' . $article_id;
// $article = Article::findBySql($sql)->all();
// 方法二:预处理,防SQL注入
$article_id = $request->get('article_id', 1);
$sql = "select * from article where article_id = :article_id"; //预处理,防SQL注入 :article_id占位符
$article = Article::findBySql($sql, [':article_id' => $article_id])->all();
dump($article);die;
//会自动加载父模板 D:\phpStudy\WWW\yii\views\layouts\home.php
return $this->render('index');
}
}
创建models
D:\phpStudy\WWW\yii\models\Article.php
<?php
namespace app\models;
use yii\db\ActiveRecord;
class Article extends ActiveRecord
{
}
访问效果:
http://yii.com/?r=home/index&article_id=4
[Haima的博客]
http://www.cnblogs.com/haima/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构