㈠ php中使用YII框架的問題
因為你Users Model的對應的表明沒改,在這個Users模型類里,有這樣的方法:
public static function tableName()
{
return '{{%users1}}'; // users1是你的新表名
}
而且直接執行Sql查詢,好像不是這樣用的吧?
我一般都是這樣的
Yii::$app->getDb()->createCommand($sql)->queryAll()
Yii::$app->getDb()->createCommand($sql)->queryOne()
Yii::$app->getDb()->createCommand($sql)->excute()
....
區別你可以看看源代碼的說明。(Yii2上的用法,yii1.x應該差不多,你稍微改改就應該沒問題)
㈡ Yii2框架操作資料庫的方法分析【以mysql為例】
本文實例講述了Yii2框架操作資料庫的方法。分享給大家供大家參考,具體如下:
准備資料庫
DROP
TABLE
IF
EXISTS
`pre_user`;
CREATE
TABLE
`pre_user`(
`id`
int(11)
AUTO_INCREMENT
PRIMARY
KEY,
`username`
varchar(255)
NOT
NULL,
`password`
varchar(32)
NOT
NULL
DEFAULT
'',
`password_hash`
varchar(255)
NOT
NULL
DEFAULT
'',
`email`
varchar(255)
NOT
NULL
DEFAULT
'',
`status`
smallint(6)
NOT
NULL
DEFAULT
10,
`created_at`
smallint(6)
NOT
NULL
DEFAULT
0,
`updated_at`
smallint(6)
NOT
NULL
DEFAULT
0
)ENGINE=InnoDB
DEFAULT
CHARSET=utf8mb4;
配置連接
config\db.php
<?php
return
[
'class'
=>
'yii\db\Connection',
'dsn'
=>
'mysql:host=localhost;dbname=yii2',
'username'
=>
'root',
'password'
=>
'root',
'charset'
=>
'utf8mb4',
'tablePrefix'
=>
'pre_'
];
查看資料庫連接是否成功
控制器里列印:
var_mp(\Yii::$app->db);
怎麼執行SQL語句?
增刪改
//
接收表單的數據
$username
=
'jack';
$sql
=
"INSERT
INTO
{{%user}}
(username,status)
VALUES
(:username,:status)";
//
返回受影響行數
$row
=
\Yii::$app->db->createCommand($sql,['username'=>$username,'status'=>8])->execute();
//
獲取自增ID
echo
\Yii::$app->db->getLastInsertID();
查詢
$sql
=
"SELECT
*
FROM
{{%user}}
WHERE
id>:id";
//
查詢結果是一個二維數組
$userArr
=
\Yii::$app->db->createCommand($sql,['id'=>1])->queryAll();
//
如果要查詢一個
$user
=
\Yii::$app->db->createCommand($sql,['id'=>1])->queryOne();
//
如果要返回單值
//
例如
select
count(*)語句
$count
=
\Yii::$app->db->createCommand($sql,['id'=>1])->queryScalar();
echo
$count;
更多關於Yii相關內容感興趣的讀者可查看本站專題:《Yii框架入門及常用技巧總結》、《php優秀開發框架總結》、《smarty模板入門基礎教程》、《php面向對象程序設計入門教程》、《php字元串(string)用法總結》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧匯總》
希望本文所述對大家基於Yii框架的PHP程序設計有所幫助。
您可能感興趣的文章:Yii2.0高級框架資料庫增刪改查的一些操作Yii2——使用資料庫操作匯總(增刪查改、事務)Yii2資料庫操作常用方法小結Yii2框架實現資料庫常用操作總結Yii2實現跨mysql資料庫關聯查詢排序功能代碼Yii+MYSQL鎖表防止並發情況下重復數據的方法Yii
連接、修改
MySQL
資料庫及phpunit
測試連接Yii實現MySQL多資料庫和讀寫分離實例分析Yii操作資料庫實現動態獲取表名的方法Yii操作資料庫的3種方法
㈢ 為什麼Yii2 框架要在控制器裡面 init方法取代
因為控制器的基類需要__constuct()方法做一些初始化的工作(比如初始化模板引擎),如果你在控制器里實現了__construct,你還需要在__construct里調用parent::__construct()就太麻煩了。
所以通常會在基類里定義一個空的init方法,並且在__construct里(通常是末尾)調用$this->init(),這樣開發的時候就只需要實現init方法
㈣ Yii2框架源碼分析之如何實現注冊和登錄
Java開源框架的源代碼怎麼讀?說讀開源框架的源代碼對自己寫程序很有幫助的,我不知道從那裡下手 找一個你熟悉的項目,下回來源碼,然後單步跟蹤一遍,前題有一定基礎,至少會單步跟蹤調試對ide也得熟悉些,項目別選太大的,像apache裡面的項目都還可以。一開始還是比較艱難的,時間長了就好了。 如同你看不懂高手過招一樣。 還是一步一步的來吧。 先看一些基礎知識,寫一些東西,然後重點看自己用到的,或者即將用到的部分,這樣提高效果會更好。 開始的時候是把源代碼關聯,有不明白的地方可以ctrl直接過去看。之後有一些積攢之後,可以去看開源項目中的閃亮的地方,比如Spring中的IOC。然後參照自己去實現一個簡單的DEMO,之中可以參考一些資料。個人理解這樣會比較快速的將一個項目中的一部分較為深入的了解。畢竟一個成熟的開源項目技術的積攢及范圍都比較大。完全了解沒有必要也沒有可能。 我讀Spring的經驗。 首先要搞清它大體的處理步驟,然後再去詳細看每個類的具體內容。讀代碼,最忌從一開始就企圖詳細理解一個大工程的所有細節。先看大匡,然後再逐步掌握自己感興趣的細節。 讀代碼的時候可以把框架的代碼讀取到IDE的工程中去, 例如,用Eclipse讀代碼,方便得很。 或者在開發中設定classpath時,把代碼也帶上, 個人認為,多看例如JDK、Spring這樣優秀的代碼,對於掌握Java編程的精髓很有幫助。 初學者也不例外! 其實框架就是DB訪問,畫面顯示,資源管理。 首先要知道你的框架的特點,也就是他的側重點。 我看源代碼喜歡全局搜索,一直找到Java自帶的基礎類。一條先走到黑。嗬嗬,挺笨的 不過建議先會用,熟練用,在研讀。會快一些,少走彎路 不管是在校的學生還是剛參加工作的,都要從基礎開始,把一些經典的基礎問題搞明白了之後再去研究框架,其實感覺框架要先明白框架的總體,有時候不明白框架甚至看著源代碼都不知道屬於哪一類,引入也會產生問題,之後在去看源代碼。最主要的是光看不行,要親手做一下,即使是最簡單的程序也要親手做,如果是人家的程序照著手動敲一遍也會有很大的收獲的 對於開源項目,我覺得從如下方面著手比較好: 2.了解整體項目的技術架構 3.熟悉它用的技術與知識面,並逐個掌握 4.從單個模塊著手,調試代碼,熟悉基基本的流程與業務 5.在不修改其源碼的基礎上做一些擴展開發的工作,為我所用6.修改並優化其代碼
㈤ yii2.0獲取到最後一條執行的sql怎麼看
這個有很多種方法
1. yii有提供一個getRawSql方法 比如說一個查詢
$query=User::find();
$query->select(['username','age'])->where(['id'=>1)->one();
echo$query->createCommand()->getRawSql();//輸出sql語句
2.可開啟yii2的debug模塊,這個功能很強大,在裡面可以查到當前頁面所有的sql信息,具體配置方法自行網路,網上太多這個配置了
3.查找Yii源碼 隨便找個模型調用原生的方法 比如 User::updateAll 方法,通過編輯器定位到updateAll方法的源碼 你會發現下面一段代碼
publicstaticfunctionupdateAll($attributes,$condition='',$params=[])
{
$command=static::getDb()->createCommand();
$command->update(static::tableName(),$attributes,$condition,$params);
return$command->execute();
}
繼續定位execute方法
publicfunctionexecute()
{
$sql=$this->getSql();
$rawSql=$this->getRawSql();
Yii::info($rawSql,__METHOD__);
if($sql==''){
return0;
}
$this->prepare(false);
$token=$rawSql;
try{
Yii::beginProfile($token,__METHOD__);
$this->pdoStatement->execute();
$n=$this->pdoStatement->rowCount();
Yii::endProfile($token,__METHOD__);
$this->refreshTableSchema();
return$n;
}catch(Exception$e){
Yii::endProfile($token,__METHOD__);
throw$this->db->getSchema()->convertException($e,$rawSql);
}
}
方法里$rawSql就是最原生要執行的sql拉,在這里打斷點輸出就ok
個人推薦第二種方法,最方法最高效,具體配置方法自己網路,很簡單!
㈥ Yii2 Html凈化防止xss攻擊,求大神解釋如下代碼
確保所有輸出內容都經過 HTML 編碼。禁止用戶提供的文本進入任何 HTML 元素屬性字元串。根據 msdn.microsoft.com/library/3yekbd5b 中的概述,檢查 Request.Browser,以阻止應用程序使用 Internet Explorer 6。了解控制項的行為以及其輸出是否經過 HTML 編碼。如果未經過 HTML 編碼,則對進入控制項的數據進行編碼。使用 Microsoft 防跨站點腳本庫 (AntiXSS) 並將其設置為您的默認 HTML 編碼器。在將 HTML 數據保存到資料庫之前,使用 AntiXSS Sanitizer 對象(該庫是一個單獨的下載文件,將在下文中介紹)調用 GetSafeHtml 或 GetSafeHtmlFragment;不要在保存數據之前對數據進行編碼。對於 Web 窗體,不要在網頁中設置 EnableRequestValidation=false。遺憾的是,Web 上的大多數用戶組文章都建議在出現錯誤時禁用該設置。該設置的存在是有原因的,例如,如果向伺服器發送回「<X」之類的字元組合,該設置將阻止請求。如果您的控制項將 HTML 發送回伺服器並收到圖 5 所示的錯誤,那麼理想情況下,您應該在將數據發布到伺服器之前對數據進行編碼。這是 WYSIWYG 控制項的常見情形,現今的大多數版本都會在將其 HTML 數據發布回伺服器之前對該數據進行正確編碼。對於 ASP.NET MVC 3 應用程序,當您需要將 HTML 發布回模型時,不要使用 ValidateInput(false) 來關閉請求驗證。只需向模型屬性中添加 [AllowHtml] 即可,如下所示: