在Symfony中直接運用SQL語句檢索資料

2021-05-17 11:24:36 字數 2149 閱讀 3399

symfony 框架中,critteria 用來檢索資料,功能已經足夠強大了。但是,如果不習慣這種寫法,還是比較鬧心的。幸運的是,symfony框架提供了另外一種資料庫檢索方法,自定義sql語句檢索資料。下面,筆者就根據實踐來簡述一下該方法。

檢索資料表         還是先看一段**:

2:
3: $query = 'select %s.*, %s.name from %s left join %s on %s=%s where %s = ?';
4: $query = sprintf($query,
5:  dbuserpeer::table_name,
6:  dbauthoritygradepeer::table_name,
7:  dbuserpeer::table_name,
8:  dbauthoritygradepeer::table_name,
9:  dbuserpeer::authority_grade_id,
10:  dbauthoritygradepeer::id,
11:  dbuserpeer::id
12: );
13:
14: $stmt = $con->preparestatement($query);
15: $stmt->setint(1,$user_id);
16: $rs = $stmt->executequery();

首先,建立資料庫連線:$con    = propel::getconnection();

其次,sql語句書寫、過濾、解析。

2: $query = sprintf($query,
3:  dbuserpeer::table_name,
4:  dbauthoritygradepeer::table_name,
5:  dbuserpeer::table_name,
6:  dbauthoritygradepeer::table_name,
7:  dbuserpeer::authority_grade_id,
8:  dbauthoritygradepeer::id,
9:  dbuserpeer::id
10: );
11:
12: $stmt = $con->preparestatement($query);
13: $stmt->setint(1,$user_id);

注意:%s 表示乙個字串,可以是表名、欄位名、表.欄位; ? 則表示引數,引數需要 $stmt->setint(1,$user_id); 來傳遞,其中setint()第乙個引數表示引數索引,就是第幾個引數(或者說是sql語句中的?)。可以從介面檔案 preparedstatement.php 中得到更詳細的資訊。

最後,執行語句:$rs = $stmt->executequery();

結果集處理

首先,看看結果集的型別如何:

mysqlresultset object ( [fetchmode:protected] => 1 [conn:protected] => mysqlconnection object ( [database:private] => test [transactionopcount:protected] => 0 [dblink:protected] => resource id #78 [dsn:protected] => arra…

很明顯,返回的是乙個物件。

其次,讓我們來遍歷結果集,還是先看**

2:

while ($rs->next())

以上**很明顯是把結果集轉換為陣列。這個是專案需要,當然可以直接引用咯。

最後,如何判斷是否返回資料、返回多少資料。

將返回記錄條數,當然,如果值為零,表示無記錄返回。

結語next()、getint()、getstring等均可以在 inte***ce resultset.php 檔案中找到更詳細的資訊。

在EF中直接執行SQL命令

通過將objectcontext.connection轉換為entityconnection,再把 entityconnection.storeconnection轉換為sqlconnection。有了這個sqlconnection,我們再建立 sqlcommand便能順利執行sql命令了。例如 u...

Django中直接執行SQL語句

歡迎加入python學習 667279387 今天在django views.py看到同事寫的 裡面有段關於資料庫查詢的語句。因為涉及多個表的查詢,所以django 的models的查詢無法滿足需求,所以直接執行了sql語句。他是按照下面的方法實現的。try connection mysqldb.c...

Linux伺服器中直接執行sql檔案

mysql uroot p123456 h127 0.0 1 h,指定ip位址,預設為localhost u,指定使用者名稱 p,指定密碼 create database 資料庫名 show databases 顯示所有資料庫列表use 資料庫名 source usr local crazy fil...