#1 jake

虽然spModel的CURD函数已经可以支撑日常开发大部分的数据库操作,但是在对数据表进行较为复杂的查询或者是操作的时候,spModel提供了针对SQL语句查询操作的两个函数。
从初学者的角度我们建议一开始不必过于深究数据库和SQL语句方面的知识,原因有二:首先实践工作中,在封装良好的框架下进行数据库开发,基本不需要使用到这些知识,仅仅是类似对PHP的数组进行操作就已经足够了;另一个是从和许多初学者的接触中发现,数据库部分的知识已经成为了编程入门的一个较难点,很容易因为数据库理论的深奥与无法实践而失去信心。

请注意findSql和runSql函数之间的区别:findSql是SQL语句查找时使用的,而runSql(query)是SQL语句更新/删除/新建的时候使用的。也就是说,findSql中的SQL语句主要以“SELECT”为开头,而runSql中的SQL语句以“UPDATE/DELETE/CREATE”开头。



findSql —— 使用SQL语句进行查找操作,等于进行find,findAll等操作

用法:findSql($sql)

参数:$sql,字符串,需要进行查找的SQL语句

例子:

上例中清理广告留言后的数据表如下:

// 这里我们将对留言本分析一下,归纳一下留言者名单以及各个留言者的留言总数。
// 首先准备SQL语句
$sql = "SELECT name, count(name) as gbsum FROM spgb_gb WHERE 1 GROUP BY name";
$gb = spClass('gb'); // 初始化留言本模型类
$result = $gb->findSql($sql); // 执行查找
dump($result); // 输出结果

返回:

如SQL语句执行成功并且获取到记录,则返回多维数组,形式与findAll返回结果相同。

如无法查找到记录,则返回FALSE。

这里要注意,在直接使用SQL语句的时候,请注意需要使用表全名(前缀+表名),上例中的gb表全名为spgb_gb。

这里说说对于SQL语句的测试,很多时候我们会遇到程序中SQL语句有问题,没有输出错误提示但是却无法达到预期的效果,这是实际开发中经常会遇到的问题。解决这个问题的一个好方法就是先输出SQL语句到浏览器上(echo $sql;),然后再将SQL语句放到PHPMyAdmin上面去执行一下,看看语句是否存在问题。

2012-08-04 16:29:42