在Symfony中直接运用SQL语句检索数据
来源:互联网 发布:最好用安卓日历软件 编辑:程序博客网 时间:2024/06/05 17:34
Symfony 框架中,Critteria 用来检索数据,功能已经足够强大了。但是,如果不习惯这种写法,还是比较闹心的。幸运的是,Symfony框架提供了另外一种数据库检索方法,自定义SQL语句检索数据。下面,笔者就根据实践来简述一下该方法。
- 检索数据表
- 结果集处理
检索数据表
还是先看一段代码: 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 文件中找到更详细的信息。
- 在Symfony中直接运用SQL语句检索数据
- 在Magento中直接使用SQL语句
- SQL语句练习-检索数据
- 在程序中直接执行SQL语句;将DGrid中的数据导出EXCEL
- proc sql语句在数据清洗中的几个运用
- 直接在sql server中更新数据
- 如何在Django中直接使用sql语句
- 第二章 SQL Select 语句检索数据
- SQL语句 第二节:检索数据
- SQL语句 第三节:排序检索数据
- 使用SQL SELECT语句检索数据
- 如何把代码中的SQL语句改成可以直接在数据库中运行的SQL语句
- 用SQL直接在ACCESS中删除数据(2003)
- sql server如何直接在表中修改数据
- sql语句如何在insert一条数据后直接返回刚刚插入的数据的ID
- sql语句如何在insert一条数据后直接返回刚刚插入的数据的ID
- sql2005中运用一条sql语句完成数据导出到Excel中
- sql2005中运用一条sql语句完成数据导出到Excel中
- SCJP试题五
- java keywords and language tutorial
- Advanced Serial Programming(翻译)
- showModalDialog和showModelessDialog
- C++程序调用C函数
- 在Symfony中直接运用SQL语句检索数据
- TCL中的正则表达式
- Python发送邮件的类
- 祝你高飞:功德圆满的实习生们~
- Linux后台运行命令详述
- lamp性能调优
- eclipse 断点调试快捷键
- PHP函数 Join() 的用法
- (十四)中央首长来访 - 2