您的位置:首页 > 数据库

在Symfony中直接运用SQL语句检索数据

2009-12-23 15:41 501 查看
      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 文件中找到更详细的信息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: