Adodb 的 GetInsertSQL 和 GetUpdateSQL以及AutoExecute

使用 GetInsertSQL 和 GetUpdateSQL 产生 Update 及 Insert 的SQL指令

ADODB 的函数:GetUpdateSQL()及 GetInsertSQL()。允许你在执行了像"Select * FROM table query Where..."这样的查询函数後,建立一 个 $rs->fields复本,改变这些栏位,然後自动产生出更新或是新增的SQL指令。

以下我们展示如何运用这些函数,我们将存取一个资料表,带有下列栏位:(ID,FirstName,LastName,Created)。在这些函数被执行前,你需要藉由一个对资料表的查询指令(select)来初始化一个资料集。

GetInsertSQL()范例

PHP代码
  1. #GetInsertSQL() 范例码    
  2.   
  3. $sql = "Select * FROM ADOXYZ Where id = -1";     
  4. # 从资料库中查询出一个空的资料集    
  5.   
  6. $conn = &ADONewConnection("mysql");     
  7. # 建立一个连结    
  8. $conn->debug=1;    
  9. $conn->PConnect("localhost""admin""""test");    
  10. # 连结到 MySQL, 资料库名称为 test    
  11. $rs = $conn->Execute($sql);     
  12. # 执行查询,并取得一个空的资料集    
  13.    
  14. $record = array();    
  15. # 初始化一个阵列,以便存放记录资料供新增用    
  16.    
  17. # 设定记录中的栏位值    
  18. $record["firstname"] = "Bob";    
  19. $record["lastname"] = "Smith";    
  20. $record["created"] = time();    
  21.     
  22. # 传入空的资料集及栏位资料阵列到GetInsertSQL函数中,以执行功能    
  23. # 这个函数将会依传入的资料,回传一个全格式的 Insert SQL指令    
  24.     
  25. $insertSQL = $conn->GetInsertSQL($rs$record,true);
  26. $conn->Execute($insertSQL);
  27. # 将记录挿入资料库中
$insertSQL = $conn->GetInsertSQL($rs, $record,true);

GetInsertSQL($rs, $arrFields,$magicq=false)
建立一个 SQL 以新增一笔记录到被给予的资料集 $rs。这个查询必需是在连结状态。$magicq 被用于指出魔术引号功能是否被激活

GetUpdateSQL() 范例:
PHP代码
  1. #GetUpdateSQL() 范例码
  2. $sql = "Select * FROM ADOXYZ Where id = 1";   
  3. # 选择一笔记录以便更新  
  4. $rs = $conn->Execute($sql);   
  5. # 执行这个查询,并取得一个存在的记录来更新  
  6. $record = array();   
  7. # 初始化一个阵列,以存放要更新的资料  
  8.   
  9. # 设定栏位里的值  
  10. $record["firstname"] = "Caroline";  
  11. $record["lastname"] = "Smith";   
  12. #更新 Caroline的姓由 Miranda 变成 Smith  
  13.   
  14. # 传入这个只有单一记录的资料集以及含有资料的阵列到 GetUpdateSQL函数里  
  15. # 函数将会回传一个具有正确 Where 条件的 Update(更新) SQL 指令  
  16. $updateSQL = $conn->GetUpdateSQL($rs$record, false ,true);  
  17.   
  18. $conn->Execute($updateSQL);   
  19. # 更新资料库中的记录  
  20. $conn->Close();  

$updateSQL = $conn->GetUpdateSQL($rs, $record, false ,true);

GetUpdateSQL($rs, $arrFields, $forceUpdate=false,$magicq=false)
建立一个 SQL 以更新一个被给予的资料集 $rs ,被修改的字段存放在数组 $arrFields中(这个数组必需是具名数组,字段名为索引,值为修正值),会与原来的资料集做一个比较,如果 $forceUpdate被设为 true,那么即使 $arrFields与 $rs->fields完全相同,也会产生出更新的SQL指令。资料集必需在连结状态。$magicq 被用于指出魔术引号功能是否被激活。

再说说,AutoExecute

还没有用 GetInsertSQL 跟 GetUpdateSQL 以前,通常都需要自己撰写相关的 SQL 去操作数据库,不免会遇到打错SQL 或是程序码中一堆 SQL 语法的问题。之后我用 adodb 的时候,通常都会跟官方文件上得范例差不多,都是用 GetInsertSQL 或是 GetUpdateSQL 产生 SQL ,然后才用 Execute 去执行该 SQL ,而GetUpdateSQL 之前还要 Select 一下数据库,取出一份该笔资料得栏位跟资料内容,所以整段程序变成有点累赘,因为一些不必要的重复的 Code 不断出现。

类似这样:

PHP代码
  1. $rs = $db->Execute("Select * from mytable where id = '{$id}'");  
  2. $updateArray['name'] = 'newName';  
  3. $UpdateSQL = $db->GetUpdateSQL($rs,$updateArray);   
  4. $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

范例:

PHP代码
  1. $record["firstName"] = "Carol";  
  2. $record["lasTname"] = "Smith";   
  3. $conn->AutoExecute($table,$record,'INSERT');  
  4. # executes "INSERT INTO $table (firstName,lasTname) values ('Carol',Smith')";  
  5. $record["firstName"] = "Carol";  
  6. $record["lasTname"] = "Jones";   
  7. $conn->AutoExecute($table,$record,'UPDATE', "lastname like 'Sm%'"); 
  8. # executes "UPDATE $table SET firstName='Carol',lasTname='Jones' WHERE lastname like 'Sm%'"; 

从上面的范例可以发现,比起之前用 GetUpdateSQL 与 GetInsertSQL 更为简洁,且更为方便了!官方文件http://phplens.com/adodb/reference.functions.getupdatesql.html#autoexecute  

Tags: adodb

« 上一篇 | 下一篇 »

只显示10条记录相关文章

php使用ADODB实现session共享 (浏览: 958, 评论: 0)
在tinybutstrong中使用adodb (浏览: 872, 评论: 0)
采用utf8编码彻底解决php乱码问题 (浏览: 1828, 评论: 0)
关于php中使用adodb的效率问题 (浏览: 1168, 评论: 0)
php5使用ADODB打开ac出错(空白)的解决方法 (浏览: 1826, 评论: 2)
使用adodb(php)连接数据库出现乱码的解决 (浏览: 1432, 评论: 0)
Smarttemplate的嵌套循环 (浏览: 1325, 评论: 0)
ADODB学习手册 (浏览: 1713, 评论: 0)
Adodb的ACCESS库自定义分页 (浏览: 1500, 评论: 0)
常用的ADODB使用方法 (浏览: 1636, 评论: 0)

Trackbacks

点击获得Trackback地址,Encode: UTF-8 点击获得Trackback地址,Encode: GB2312 or GBK 点击获得Trackback地址,Encode: BIG5

发表评论

评论内容 (必填):