ThinkPHP 連線Oracle資料庫的詳細教程(2)_PHP教程
最近收集了一些關於THinkPHP連線Oracle資料庫的問題,有很多朋友按照連線mysql的方法來操作,導致有一些方法在Oreale中無法正常使用。比如說:findAll,Select方法無法使用,獲取不到需要的資料。Create和add方法無法建立和寫入資料到資料庫中。
其實根據以前問題我做了幾天除錯,找到了問題所在,併成功在我自己一個小專案練習中使用正常,那麼現在就將我的經驗分享給大家。
1,資料庫的連線及配置檔案的內容我就不說了, 上面已經做了解釋。我這裡只根據一個數據表的例子來說明我的操作。
2,表結構如下:

3,這個表中有3個欄位,ID主鍵,使用者名稱username和密碼password,因為oracle資料庫把表名和欄位都是轉成大寫的,同時不支援ID主鍵自增,我只有使用另外的方法來實現這個功能,比如:ID自動序列+觸發器實現ID自增。
4, ThinkPHP中,Action是控制器,Model是模型,檢視是以模板方式體現的。
首先,說控制器,我只做增加和獲取列表的方法介紹。
其次,說模型,這裡才是成功的主要原因。為什麼?ThinkPHP是有欄位對映的,這個在對MYSQL的支援非常完美,基本不用寫MODEL,但是對ORALCE就不行了,當使用M->add()來新增資料時,欄位會被$this->_facade()方法過濾掉。這樣生成的SQL語句就是沒法執行的,肯定是錯誤的,導致資料新增不到資料庫中,那麼使用select()方法也是一樣被過濾。
再次,當我單步除錯時,斷點被過濾的時候,過濾方法使用到了new出來的MODEL,這個MODEL會有一個欄位對映的陣列在裡面,這個過濾方法就是和這個欄位陣列進行對比,如果不一致就過濾掉,結果我除錯發現,new出來的MODEL根本沒有把欄位對映加進去,陣列直接為空,當然就沒法和新增的資料欄位一一對應了。這就是錯誤的關鍵。
下面就來說解決方法,其實很簡單,按照基本的MVC結構,不管是PHP還是JAVA還是.NET都有這樣的結構,那麼按照嚴格的標準,MODEL層的程式碼是必須寫的,就是要和資料庫的欄位做對映。但是很多用mysql的,就直接沒有去寫MODEL裡面的程式碼。這種習慣被用到了oracle中,就出了問題。
5, 下面針對我上面的資料表寫出我的程式碼:
我的Action是這樣的:UserAction.class.php。控制器我只對新增和查詢做例子,因此程式碼如下:
