今天我们详细介绍一下TFAPI的数据库操作使用方法。理论在做TFAPI开发的时候,可以在任意代码位置得到数据库操作对象的实例 $this->dbObj,也就是说我们无需自己单独地初始化一个数据源连接。
那么数据源设定在哪里呢?数据源设定通常情况下在 WEB-APP/web.inc 配置文件当中,见下面示例代码:
switch (env_ctl::getenv('mode')){ case 'develop': env_ctl::adddbs("mysql","driver=mysql2;server=localhost;uid=root;pwd=abcdef;database=fj;charset=GBK;tbl_prefix=;tbl_lastfix=;"); break; default: env_ctl::adddbs("mysql","driver=mysql2;server=localhost;uid=root;pwd=abcdef;database=fj;charset=GBK;tbl_prefix=;tbl_lastfix=;"); break; }
这里面的 switch 交换语句设定了两个数据源,一个是 develop 一个是默认的,通过 env_ctl::getenv('mode') 控制。develop 用于开发环境,默认设定用于生产环境,控制变量在 WEB-APP/config.inc 配置文件当中指定。
env_ctl::setenv('mode','develop');
数据源设定好了以后,就可以在代码当中使用 $this->dbObj 这个数据库操作对象来进行数据库的实际操作了。
一、对象的各种常用方法介绍
下面我们逐一介绍数据库操作对象的各种方法:
1)整表提取命令 table
语法:
$this->dbObj->table($Sql)
说明:
该命令可将查询语句选择的所有记录数据全部提取出来,放入一个二维数组当中,每一个子数组就是一行数据。
示例:
$userInfos = $this->dbObj->table("select uId, uName from users");
假设 users 表只有3行数据,这个操作会将全部数据取出来放入 $userInfos 数组内,其数据格式为
$userInfos = array( 0=>array('uId'=>123, 'uName'=>"Zhang 3"), 1=>array('uId'=>456, 'uName'=>"Li 4"), 2=>array('uId'=>789, 'uName'=>"Wang 5"), );
2)单行提取命令 row
语法:
$this->dbObj->row($Sql);
说明:
该命令可将查询语句选择的记录集的第一行数据提取出来,放入一个一维数组当中,该一维数组就是第一行数据。
示例:
$userInfo = $this->dbObj->row("select uId, uName from users");
假设 users 表只有3行数据,这个操作只会将第一行数据取出来放入 $userInfo 数组内,其数据格式为
$userInfo = array('uId'=>123, 'uName'=>"Zhang 3");
3)单值提取命令 scalar
语法:
$this->dbObj->scalar($Sql);
说明:
该命令可将查询语句选择的记录集的第一行数据的第一个字段的值提取出来,返回给一个变量。
示例:
$userId = $this->dbObj->scalar("select uId, uName from users");
假设 users 表只有3行数据,这个操作只会将第一行数据的第一个字段取出来放入 $userId 变量,其数据格式为
$userId = 123;
4)数组提取命令 to_array
语法:
$this->dbObj->to_array($Sql);
说明:
该命令可将查询语句选择的所有记录查询出来,并使用第一个字段的值作为数组键,使用第二个字段的值作为数组的值,拼凑成一个一维数组。第三个及后面的字段会被忽略。
示例:
$userArr = $this->dbObj->to_array("select uId, uName from users");
假设 users 表只有3行数据,这个操作会将全部数据取出来该规则放入 $userArr 数组内,其数据格式为
$userArr = array( 123=>"Zhang 3", 456=>"Li 4", 789=>"Wang 5", );
5)序列提取命令 to_list
语法:
$this->dbObj->to_list($Sql);
说明:
该命令可将查询语句选择的所有记录查询出来,并使用第一个字段的值拼凑成一个以逗号分隔的序列。类似 [数字1], [数字2], [数字3]... [数字n] 的序列。第二个及后面的字段会被忽略。
示例:
$userIdList = $this->dbObj->to_list("select uId from users");
假设 users 表只有3行数据,这个操作会将全部数据取出来该规则放入 $userIdList 变量内,其数据格式为
$userIdList = "123, 456, 789";
6)更该语句提交命令 execute
语法:
$this->dbObj->execute($Sql);
说明:
该命令用于提交所有更改性质的Sql语句,包括Create、Drop、Insert、Update、Delete、Grant等等。执行失败的情况下返回 false。
7)插入语句拼凑命令 insert_builder
语法:
$this->dbObj->insert_builder($insertTableName, $insertDataArr);
说明:
该命令用于拼凑一个标准的 INSERT 语句。
示例:
$instSql = $this->dbObj->insert_builder("users", array('uId'=>null, 'uName'=>"ZhangSanFeng"));
$instSql = "INSERT INTO users (uId, uName) VALUES (null, 'ZhangSanFeng')";
8)更新语句拼凑命令 update_builder
语法:
$this->dbObj->update_builder($updateTableName, $updateDataArr, $whereStr);
说明:
该命令用于拼凑一个标准的 UPDATE 语句。
示例:
$updSql = $this->dbObj->update_builder("users", array('uName'=>"LiMoChou"), "uId = 123");
$updSql = "UPDATE users SET uName = 'LiMoChou' WHERE uId = 123";
注意事项:
a)可以使用在字段名称前面加‘@’的方式提交特殊内容,例如:array('@datetime'=>"now()"),这个时候会解析为 datetime = now() 而不会给 now() 加引号。
b)可以使用在字符名称前面加数学运算符的方式提交特殊内容,例如:array('+readCount'=>1),这个时候会解析为 readCount = readCount+1 实现自增目的。
9)查询语句拼凑命令 sql_builder
语法:
$this->dbObj->sql_builder($mainSql, $param1, $pram2...);
该命令用于拼凑一个标准的 SELECT 语句。
示例:
$sql = $this->dbObj->sql_builder("select * from users where uId = @int", 123);
$sql = "select * from users where uId = 123";
注意事项:
a)可用的内部变量名称有:@int、@dcm、@str、@lstr、@llstr、@lrstr。
b)@int会被替换为整数
c)@dcm会被替换为浮点数
d)@str会被替换为字符串。
二、对象常用方法的安全执行模式的语法
所谓安全执行模式就是可以实现Sql防注入的功能的执行模式,这里我们只提供一个示例来说明。
各个方法的安全执行模式的方法名称对应关系表。
1)整表提取 table 对应 st
2)单行提取 row 对应 sr
3)单值提取 scalar 对应 ss
4)数组提取 to_array 对应 sta
5)序列提取 to_list 对应 stl
6)更改语句 execute 对应 se
7)插入语句 insert_builder 对应 ib
8)更新语句 update_builder 对应 ub
9)查询语句 sql_builder 对应 sb
示例:
$uId = 123; $uName = "Zhang 3 (we set a danger char...) '; delete from users;"; $sql = $this->dbObj->sb("select * from users where uId = @int and uName = @str", $userId, $userName);
$sql = "select * from users where uId = 123 and uName = 'Zhang 3 (we set a danger char...) \'; delete from users;'";
好了,到此为止,数据库操作对象的常用功能方法介绍就全都说完了!多多练习吧~~