zend framework非常强悍,它给我们提供了特别多的功能,它基本上可以和java里的SSH三大框架相媲美,zend开始学的时候会觉得特别吃力,因为zend framework的封装度特别高学习起来当然吃力了,这次要分享的内容是zend framework和mysql交互。
1.zend framework使用pdo和mysql交互
因为这个原理我们第一步要确保mysql的pdo扩展库已经启用,怎么启用我就不多说了,为了确保万无一失可以使用phpinfo()查看扩展是否有效。
下面就是配置了首先找到configs下面的application.ini文件,使用zend studio编辑在下面加上这样一段配置:
[mysql]
db.adapter=PDO_MYSQL
db.params.host=localhost
db.params.username=root
db.params.password=123456
db.params.dbname=humansource
中括号里的mysql也可以写成别的,这个名称后面会用到
2.初始化数据库适配器
一般来说需要用到数据库的地方才需要初始化适配器,合理的做法是写在每个控制器的init方法里,但是这样还是很麻烦,因此我打算抽象出一个控制器,在需要使用数据库的控制器再继承这个新的控制器,新控制器如下
<?php
class BaseController extends Zend_Controller_Action
{
public function init()
{
$url = constant("APPLICATION_PATH").DIRECTORY_SEPARATOR.'configs'.DIRECTORY_SEPARATOR.'application.ini';
//这个名称要和application.ini配置的相同,我配置的是[mysql]
$dbconfig = new Zend_Config_Ini($url , "mysql");
$db = Zend_Db::factory( $dbconfig->db);
$db->query('set names utf8');
Zend_Db_Table::setDefaultAdapter($db);
}
}
zend framework的控制器必须继承Zend_Controller_Action,如果没继承这个类就不是控制器
3.创建表模型
一般来说一个表对应一个模型,模型的php文件应该写在models文件夹下面,大致配置如下
<?php
class UserModel extends Zend_Db_Table{
protected $_name='m_user';
protected $_primary='id';
}
?>
模型层的php也要继承一个类否则就不是模型,这里需要配置一下表名和主键主键的默认字段就是id,如果是这种情况主键可以不配置
4.查询操作
查询操作只需实例化相应模型即可,如果要考虑sql注入的情况可以先取得适配器,之后使用quoteInfo即可,之后使用zend_db_table提供的方法操作就可以了,下面列出查询的几种最基本使用,复杂的用法下次分享给大家
<?php
require_once APPLICATION_PATH."/models/UserModel.php";
require_once APPLICATION_PATH."/controllers/BaseController.php";
class UserController extends BaseController
{
public function userinfoAction()
{
// action body
}
//最基本的用法
public function getalluserAction()
{
$u=new UserModel();
echo "----查询全部数据-----";
$result=$u->fetchAll()->toArray();
echo "<pre>";
print_r($result);
echo "</pre>";
echo "<br/>----条件查询不考虑sql注入的问题-----";
$wherecondition="username='pwb'";
$result2=$u->fetchAll($wherecondition)->toArray();
echo "<pre>";
print_r($result2);
echo "</pre>";
echo "<br/>----条件查询并考虑考虑sql注入的问题-----";
//通过模型取得适配器
$adapter=$u->getAdapter();
//将危险字符进行转义防止sql注入(只有一个参数的情况)
$condition=$adapter->quoteInto("username=?", "cyl");
$result3=$u->fetchAll($condition)->toArray();
echo "<pre>";
print_r($result3);
echo "</pre>";
echo "<br/>----条件查询并考虑考虑sql注入的问题(多个参数)-----";
//将危险字符进行转义防止sql注入(只有一个参数的情况)
$condition2=$adapter->quoteInto("username=?", "cyl")
.$adapter->quoteInto("and id>?", 1);
$result4=$u->fetchAll($condition2)->toArray();
echo "<pre>";
print_r($result4);
echo "</pre>";
exit();
}
}
fetchAll可以使用where条件,order排序等,具体的使用可以参考开发手册。