Adodb 的 AutoExecute

Posted on 2007-09-05 15:40:30 by darkhero

很久沒有寫關於 adodb 相關的文章了,前一陣子(好久以前)翻閱文件的時候,注意到新增了一個 AutoExecute 的 Method ,看名字就覺得很有趣,所以當然就玩了一下。

一玩不得了,這東西太好用了,所以一直想說要介紹給朋友用,但是一直忘記要寫文章,雖然過了很久,但是還是來補一下好了。

還沒有用 GetInsertSQL 跟 GetUpdateSQL 以前,通常都需要自己撰寫相關的 SQL 去操作資料庫,不免會遇到打錯 SQL 或是程式碼中一堆 SQL 語法的問題。

之後我用 adodb 的時候,通常都會跟官方文件上得範例差不多,都是用 GetInsertSQL 或是 GetUpdateSQL 癌產生 SQL ,然後才用 Execute 去執行該 SQL ,而GetUpdateSQL 之前還要 Select 一下資料庫,取出一份該筆資料得欄位跟資料內容,所以整段程式變成有點累贅,因為一些不必要的重複的 Code 不斷出現。

類似這樣:

$rs = $db->Execute("Select * from mytable where id = '{$id}'");
$updateArray['name'] = 'newName';
$UpdateSQL = $db->GetUpdateSQL($rs,$updateArray);
$db->Execute($sql);

而比較新的版本的 adodb 則新增了 AutoExecute ,則可以大幅度減少這些無謂的程式碼.

AutoExecute($table, $arrFields, $mode, $where=false, $forceUpdate=true,$magicq=false)

參數說明:

  • $table 要處理的表格名稱
  • $arrFields 要更新或新增的欄位內容
  • $mode 模式選擇,內容需為 INSERT 或是 UPDATE 
  • $where 當模式為 UPDATE 的時候,需要輸入更新條件
  • $forceUpdate 一般來說預設 UPDATE 的時後,會先從資料庫取出該筆資料,然後若是欄位內容沒有修改,則不會進行UPDATE,只會更新有更新的欄位,若是姜此參數設定,則會強迫一律更新。
  • $magicq 系統環境是否有把 magice_quotes 打開,預設是沒有,所以會替你將傳入的資料作 qstr

範例:

$record["firstName"] = "Carol";
$record["lasTname"] = "Smith";
$conn->AutoExecute($table,$record,'INSERT');
# executes "INSERT INTO $table (firstName,lasTname) values ('Carol',Smith')";

$record["firstName"] = "Carol";
$record["lasTname"] = "Jones";
$conn->AutoExecute($table,$record,'UPDATE', "lastname like 'Sm%'");
# executes "UPDATE $table SET firstName='Carol',lasTname='Jones' WHERE lastname like 'Sm%'";
從上面的範例可以發現,比起之前用 GetUpdateSQL 與 GetInsertSQL 更為簡潔,且更為方便了!
官方文件
http://phplens.com/adodb/reference.functions.getupdatesql.html#autoexecute 

Tags: PHP+MySQL

加入書籤: 收藏這篇文章到HEMiDEMi

迴響

AutoExecute 要注意 escape string 的問題 Post By micmic3 at 2007-09-20 10:51:06
阿凱:

我用舊的 adodb autoexcute 會把 mysql_escape_string 後的字串再加一個 slash

Best regards!
注意參數... Post By ㄚ凱 at 2007-09-20 15:45:39
AutoExec 最後一個參數是讓你傳入 magic_quote_gpc 的唷....
你可以在該參數傳入 true..
這樣 AutoExecute 內部ㄐㄧㄡ就不會多跑一次 slashes 囉..
嗯!我誤會了 Post By micmic3 at 2007-09-20 17:10:45
它的 default 是 false ,我以為 false 是不加說!
意思是這樣 Post By ㄚ凱 at 2007-09-20 17:58:25
那個參數的意思是..
你要傳入你的系統有沒有開 magic_quote_gpc ,有的話傳入 true,沒有的話傳入 false ...
原來如此 Post By micmic3 at 2007-09-20 22:23:49
所以如果 false 它就會加囉!
不過因為我要用 tinyMCE 所以我用mysql_real_escape_string
不能讓它加slash
-----
BTW
我有時會開一個欄位 add_datetime 會直接 insert NOW()讓mysql 自己加時間....
用 autoexcute 時就只能讓
recorde = date y-m-d H:i:s
不知有沒有辦法可以 insert NOW() 説:D
我又回來了:D Post By micmic3 at 2007-09-26 20:16:10
嗯..我試過不論 ture or false
都會加 slash 哦
蝦米?? Post By ㄚ凱 at 2007-09-28 20:39:48
如果真是這樣那就是有問題了,看樣子要來追一追 Adodb 的程式碼了...
測試結果.. Post By ㄚ凱 at 2007-09-28 21:37:19
實際測試了一下,AutoExecute 的參數是有作用的勒~...

建議你同時檢查一下
get_magic_quotes_gpc();
get_magic_quotes_runtime();
的輸出看看好了...
不知道會不會是這兩個影響...
adodb lite Post By micmic3 at 2008-03-24 15:45:15
阿凱有用過 adodb lite 嗎?
adodb lite的 DOCUMENT 好像少一點
而且還無法支援 cache....
我的經驗是大部份的 loading 會在資料很多的
MYSQL ,apache 和 php 反而還好
所以我會想用 adodb cache 的功能,
你認為呢??
有用過.. Post By 阿凱 at 2008-03-24 16:06:59
我有用過一下子 adodb-lite ...
不過後來覺得相關功能少的太多了,所以後來就沒有用了。

adodb 的 cache 功能我有用,是個非常好用的功能,可以大量減少 sql 的負擔。

個人覺得拉..只要充分好好的理解使用 adodb cache 的功能, 根本就不需要考慮 adodb-lite ,畢竟在功能上少了很多。

我要留言!

壹拾 加 壹拾貳 等於