在Symfony中直接运用SQL语句检索数据
2009-12-23 15:41
501 查看
Symfony 框架中,Critteria 用来检索数据,功能已经足够强大了。但是,如果不习惯这种写法,还是比较闹心的。幸运的是,Symfony框架提供了另外一种数据库检索方法,自定义SQL语句检索数据。下面,笔者就根据实践来简述一下该方法。
检索数据表
结果集处理
首先,创建数据库连接:$con = Propel::getConnection();
其次,SQL语句书写、过滤、解析。
注意:%s 表示一个字符串,可以是表名、字段名、表.字段; ? 则表示参数,参数需要 $stmt->setInt(1,$user_id); 来传递,其中setInt()第一个参数表示参数索引,就是第几个参数(或者说是sql语句中的?)。可以从接口文件 PreparedStatement.php 中得到更详细的信息。
最后,执行语句:$rs = $stmt->executeQuery();
MySQLResultSet Object ( [fetchmode:protected] => 1 [conn:protected] => MySQLConnection Object ( [database:private] => test [transactionOpcount:protected] => 0 [dblink:protected] => Resource id #78 [dsn:protected] => Arra…
很明显,返回的是一个对象。
其次,让我们来遍历结果集,还是先看代码
以上代码很明显是把结果集转换为数组。这个是项目需要,当然可以直接引用咯。
最后,如何判断是否返回数据、返回多少数据。
将返回记录条数,当然,如果值为零,表示无记录返回。
检索数据表
结果集处理
检索数据表
还是先看一段代码:1: $con = Propel::getConnection();
2:
3: $query = 'select %s.*, %s.name from %s left join %s on %s=%s where %s = ?';
4: $query = sprintf($query,
5: DbUserPeer::TABLE_NAME,
6: DbAuthorityGradePeer::TABLE_NAME,
7: DbUserPeer::TABLE_NAME,
8: DbAuthorityGradePeer::TABLE_NAME,
9: DbUserPeer::AUTHORITY_GRADE_ID,
10: DbAuthorityGradePeer::ID,
11: DbUserPeer::ID
12: );
13:
14: $stmt = $con->prepareStatement($query);
15: $stmt->setInt(1,$user_id);
16: $rs = $stmt->executeQuery();
首先,创建数据库连接:$con = Propel::getConnection();
其次,SQL语句书写、过滤、解析。
1: $query = 'select %s.*, %s.name from %s left join %s on %s=%s where %s = ?';
2: $query = sprintf($query,
3: DbUserPeer::TABLE_NAME,
4: DbAuthorityGradePeer::TABLE_NAME,
5: DbUserPeer::TABLE_NAME,
6: DbAuthorityGradePeer::TABLE_NAME,
7: DbUserPeer::AUTHORITY_GRADE_ID,
8: DbAuthorityGradePeer::ID,
9: DbUserPeer::ID
10: );
11:
12: $stmt = $con->prepareStatement($query);
13: $stmt->setInt(1,$user_id);
注意:%s 表示一个字符串,可以是表名、字段名、表.字段; ? 则表示参数,参数需要 $stmt->setInt(1,$user_id); 来传递,其中setInt()第一个参数表示参数索引,就是第几个参数(或者说是sql语句中的?)。可以从接口文件 PreparedStatement.php 中得到更详细的信息。
最后,执行语句:$rs = $stmt->executeQuery();
结果集处理
首先,看看结果集的类型如何:MySQLResultSet Object ( [fetchmode:protected] => 1 [conn:protected] => MySQLConnection Object ( [database:private] => test [transactionOpcount:protected] => 0 [dblink:protected] => Resource id #78 [dsn:protected] => Arra…
很明显,返回的是一个对象。
其次,让我们来遍历结果集,还是先看代码
1: $result = array();
2: while ($rs->next()){
3: $arrTemp = array();
4: $arrTemp['id'] = $rs->getInt('id');
5: $arrTemp['user_name'] = $rs->getString('user_name');
6: $arrTemp['user_id'] = $rs->getString('user_id');
7: $arrTemp['contact_company'] = $rs->getString('contact_company');
8: $arrTemp['contact_phone'] = $rs->getString('contact_phone');
9: $arrTemp['contact_email'] = $rs->getString('contact_email');
10: $arrTemp['authority'] = $rs->getString('name');
11: $result[] = $arrTemp;
12: }
以上代码很明显是把结果集转换为数组。这个是项目需要,当然可以直接引用咯。
最后,如何判断是否返回数据、返回多少数据。
1: $rs->getRecordCount();
将返回记录条数,当然,如果值为零,表示无记录返回。
结语
next()、getInt()、getString等均可以在 interface ResultSet.php 文件中找到更详细的信息。相关文章推荐
- 另类Sql语句直接导出表数据到Execl
- pb中sql语句用to_char查询出来数据,居然无法检索出数据,oracle数据库,这是什么原因?
- SQL语句调优 - 索引上的数据检索方法
- SQL语句调优 - 索引上的数据检索方法
- 不用SQL语句直接修改数据
- PB 中用带参数的 SQL 语句字符串检索数据并动态生成Datawindow
- 另类Sql语句直接导出表数据到Execl
- 在程序中直接执行SQL语句;将DGrid中的数据导出EXCEL
- sql语句如何在insert一条数据后直接返回刚刚插入的数据的ID
- sql2005中运用一条sql语句完成数据导出到Excel中
- 利用修改AccessDataSource的sql语句来检索数据
- mysql的sql语句中直接计算时间 查询昨天 一周前 一月前 一年前的数据的方法
- 同样的一句SQL语句在pl/sql 代码块中count 没有数据,但是直接用SQl 执行却可以count 得到结果
- sql2005中运用一条sql语句完成数据导出到Excel中
- Entity Framework(EF) 直接执行数据库命令并返回 DataTable 数据参数化 SQL 语句
- sql语句如何在insert一条数据后直接返回刚刚插入的数据的ID
- 直接使用sql语句查询数据库数据
- 另类Sql语句直接导出表数据到Execl
- sql2005中运用一条sql语句完成数据导出到Excel中
- Hibernate的hql语句查询不到内容,但是库里有数据,直接执行SQL也能执行,能得到值,返回值取不到