使用 GetInsertSQL 和 GetUpdateSQL 产生 Update 及 Insert 的SQL指令
ADODB 的函数:GetUpdateSQL()及 GetInsertSQL()。允许你在执行了像"Select * FROM table query Where..."这样的查询函数後,建立一 个 $rs->fields复本,改变这些栏位,然後自动产生出更新或是新增的SQL指令。
以下我们展示如何运用这些函数,我们将存取一个资料表,带有下列栏位:(ID,FirstName,LastName,Created)。在这些函数被执行前,你需要藉由一个对资料表的查询指令(select)来初始化一个资料集。
GetInsertSQL()范例:
GetInsertSQL($rs, $arrFields,$magicq=false)
建立一个 SQL 以新增一笔记录到被给予的资料集 $rs。这个查询必需是在连结状态。$magicq 被用于指出魔术引号功能是否被激活
GetUpdateSQL() 范例:
$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 语法的问题。
类似这样:
- $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


