天天看點

yii連接配接mysql方式_YII2中操作資料庫的方式

一、以createCommand方式:

// YII2中通過createCommand來處理資料庫

// 查詢多條記錄

// {{%user}} 表示如果設定了表字首,YII會自動幫你替換

$data1 = YII::$app->db->createCommand('select * from {{%user}}')->queryAll();

// 查詢一條記錄

// createCommand的第二個參數可以進行參數綁定

$data2 = YII::$app->db->createCommand('select * from {{%user}} where id=:id', ['id' => 2])->queryOne();

// 傳回一列(第一列)資料

$data3 = YII::$app->db->createCommand('select name from {{%user}}')->queryColumn();

// 傳回一個标量值,常用于統計

$data4 = YII::$app->db->createCommand('select count(*) as cnt from {{%user}}')->queryScalar();

// 綁定參數,防止SQL注入問題

// bindValue綁定一個參數

$data5 = YII::$app->db->createCommand('select * from {{%user}} where id=:id')

->bindValue(':id', 3)

->queryOne();

// 綁定多個參數

$data6 = YII::$app->db->createCommand('select * from {{%user}} where id=:id and name=:name')

->bindValues([':id' => 5, ':name' => 'eee'])

->queryOne();

// 綁定參數引用

$id = 7;

$data7 = YII::$app->db->createCommand('select * from {{%user}} where id=:id')

->bindParam(':id', $id)

->queryOne();

// 執行非查詢語句

$data8 = YII::$app->db->createCommand('update {{%user}} set name=:name where id=:id')

->bindValues([':name' => 'abcdef', ':id' => 8])

->execute();

// 當然,我們也可以用更加簡便的方法

// insert()插入

$data9 = YII::$app->db->createCommand()->insert('{{%user}}', [

'name' => 'test',

'sex' => 1,

'age' => 28,

])->execute();

// batchInsert()批量插入

$data10 = YII::$app->db->createCommand()->batchInsert('{{%user}}', ['name', 'sex', 'age'], [

['111', 1, 11],

['222', 1, 22],

])->execute();

// update()更新

$data11 = YII::$app->db->createCommand()->update('{{%user}}', [

'name' => '1242143214'

], 'id=:id', ['id' => 10])->execute();

// delete()删除

$data12 = YII::$app->db->createCommand()->delete('{{%user}}', 'id=:id', ['id' => 11])->execute();

// 執行事務

$trans = YII::$app->db->beginTransaction();

try {

YII::$app->db->createCommand()->update('{{%user}}', ['age' => 12], 'id=:id', ['id' => 13])->execute();

YII::$app->db->createCommand()->update('{{%user}}', ['age' => 22], 'id=:id', ['id' => 14])->execute();

$trans->commit();

} catch (\Exception $e) {

//如果語句中有一個執行失敗,那麼就将復原

$trans->rollBack();

throw $e;

}

// 擷取表的定義資訊

$info = YII::$app->db->getTableSchema('{{%user}}');

二、以AR(Active Record)方式操作資料庫

我們需要建立一個繼承自\yii\db\ActiveRecord的模型,然後重寫tableName()函數,傳回要操作的表名。

namespace app\models;

use yii\db\ActiveRecord;

class MyUser extends ActiveRecord

{

public static function tableName()

{

return '{{%user}}';

}

}

常用操作如下:

// 查詢一條記錄

// asArray的作用是以數組形式傳回結果

// find()會傳回一個ActiveQuery對象,ActiveQuery對象繼承自yii\db\Query,是以可以使用Query中的所有查詢方法

$data1 = MyUser::find()->where(['id' => 1])->asArray()->one();

// 查詢多條記錄

$data2 = MyUser::find()->where([])->orderBy('id desc')->asArray()->all();

// 根據主鍵擷取一條記錄

$data3 = MyUser::findOne(3);

// 根據主鍵擷取多條記錄

$data4 = MyUser::findAll([4, 5, 6, 7]);

// 帶條件查詢多條記錄

$data5 = MyUser::findAll(['sex' => 1]);

// 運作原生SQL

$data6 = MyUser::findBySql('select * from {{%user}} where id=:id', [':id' => 8])->asArray()->one();

// 添加資料

// 準備一個新的執行個體,然後設定對應字段屬性,儲存

$user = new MyUser();

$user->name = 'test';

$user->sex = 1;

$user->age = 22;

$user->save();

// 修改資料

// 先擷取一個對象,然後設定對應字段屬性,儲存

$upd = MyUser::findOne(10);

$upd->name = 'abcdefg';

$upd->save();

// 修改多條資料

$data7 = MyUser::updateAll(['name' => 'update'], ['sex' => 1]);

// 删除一條資料

$del = MyUser::findOne(15);

$del->delete();

// 删除多條資料

$data8 = MyUser::deleteAll(['sex' => 0]);

// 事務操作

$user2 = MyUser::findOne(22);

$user3 = MyUser::findOne(33);

$trans = MyUser::getDb()->beginTransaction();

try {

$user2->name = '2222';

$user3->name = '3333';

//修改資料

$user2->save();

$user3->save();

$trans->commit();

} catch (\Exception $e) {

$trans->rollBack();

throw $e;

}

具體更多的操作方式建議檢視官方文檔。