framework配置操作数据库实例分析,数据库使用示例

By admin in 4858.com on 2019年2月9日

Gateway/Worker模型 数据库使用示例

From: 

1、数据库配置Applications/XXX/Config/Db.php

<?php
namespace Config;
/**
 * mysql配置
 * @author walkor
 */
class Db
{
    /**
     * 数据库的一个实例配置,则使用时像下面这样使用
     * $user_array = Db::instance(‘user‘)->select(‘name,age‘)->from(‘users‘)->where(‘age>12‘)->query();
     * 等价于
     * $user_array = Db::instance(‘user‘)->query(‘SELECT `name`,`age` FROM `users` WHERE `age`>12‘);
     * @var array
     */
    public static $user = array(
        ‘host‘    => ‘127.0.0.1‘,
        ‘port‘    => 3306,
        ‘user‘    => ‘your_user_name‘,
        ‘password‘ => ‘your_password‘,
        ‘dbname‘  => ‘user‘,
        ‘charset‘    => ‘utf8‘,
    );
}

2、Applications/XXX/Event.php

<?php
use \GatewayWorker\Lib\Gateway;
use \GatewayWorker\Lib\Db;

/**
 * 数据库示例,假设有个user库,里面有个user表
 */
class Event
{

   /**
    * 有消息时触发该方法,根据发来的命令打印2个用户信息
    * @param int $client_id 发消息的client_id
    * @param string $message 消息
    * @return void
    */
   public static function onMessage($client_id, $message)
   {
        // 发来的消息
        $commend = trim($message);
        if($commend !== ‘get_user_list‘)
        {
            Gateway::sendToClient($client_id, "unknown commend\n");
            return;
        }
        // 获取用户列表(这里是临时的一个测试数据库)
        $ret = Db::instance(‘user‘)->select(‘*‘)->from(‘users‘)->where(‘uid>3‘)->offset(5)->limit(2)->query();
        // 打印结果
        return Gateway::sendToClient($client_id, var_export($ret, true));
   }

}

先是大家先引用些概念:
工厂形式:专门定义一个类来负担创立其他类的实例,被创建的实例寻常都兼备其同的父类。工厂方式属于类的创办情势,日常依照自变量的两样重回不一样类的实例。
厂子形式的面目是由一个工厂类依据传入的参量,动态控制应该创造出哪一个产品的实例。工厂格局式涉及到厂子角色、抽象产品角色和切实产品角色。
工厂(Creator)角色:是工厂情势的主导,它担负落到实处创造所有实例的其中逻。工厂类可以被外面平素调用,创立所需产品对象。
空泛产品(Product)角色:是工厂形式所创建所有目的的父类,它肩负描述所有实例所共有的共用接口。
具体产品(Concrete
Product)角色:是工厂情势的创立目标,所有的目的都是担任这么些角色的某部具体类的实例。
ZF中的zend_db就是工厂情势的一个很好的例证。
接下去就起来开展辨析。。。。。。
布局zf的时候,我们得以将数据库的连年操作音讯放在Bootstrap.php文件中

zendframework项目条件搭建后,看了下zend
framework配置操作数据库,php教程如下:
在application/configs的文件下创设一个config.ini文件
布署音信如下
[general]
db.adapter=PDO_MYSQL
db.config.host=localhost/IParess
db.config.username=username
db.config.password=password
db.config.dbname=databasename
2、
在pulibc 目录的index.php页面中
/** Zend_Application */
require_once ‘Zend/Application.php’;
的底下插入
//set the datase config
require_once ‘Zend/Config/Ini.php’;
require_once ‘Zend/Registry.php’;
require_once ‘Zend/Db.php’;
require_once ‘Zend/Db/Table.php’;
$config=new
Zend_Config_Ini(‘./../application/configs/config.ini’,null, true);
Zend_Registry::set(‘config’,$config);
$dbAdapter=Zend_Db::factory($config->general->db->adapter,$config->general->db->config->toArray());
$dbAdapter->query(‘SET NAMES UTF8’);
Zend_Db_Table::setDefaultAdapter($dbAdapter);
Zend_Registry::set(‘dbAdapter’,$dbAdapter);
据此,我就用我的地头wordpress数据库来测试下,就用wp_posts表来测试呢:
先是模型models建立Wp_posts.php

正文实例讲述了Zend
Framework中Zend_Config组件用法。分享给我们供大家参考,具体如下:

数据库类使用的一些示范

复制代码 代码如下:

复制代码 代码如下:

1.从PHP数组中读取数据

配置

在Config/Db.php中布局数据库信息,若是有三个数据库,可以在Db.php中配置多少个实例
例如上边配置了三个数据库实例

<?php
namespace Config;
class Db
{
    // 数据库实例1
    public static $db1 = array(
        ‘host‘    => ‘127.0.0.1‘,
        ‘port‘    => 3306,
        ‘user‘    => ‘mysql_user‘,
        ‘password‘ => ‘mysql_password‘,
        ‘dbname‘  => ‘db1‘,
        ‘charset‘    => ‘utf8‘,
    );

    // 数据库实例2
    public static $db2 = array(
        ‘host‘    => ‘127.0.0.1‘,
        ‘port‘    => 3306,
        ‘user‘    => ‘mysql_user‘,
        ‘password‘ => ‘mysql_password‘,
        ‘dbname‘  => ‘db2‘,
        ‘charset‘    => ‘utf8‘,
    );
}

<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
function __construct($app){
parent::__construct($app);
$url=constant(‘APPLICATION_PATH’).DIRECTORY_SEPARATOR.’configs’.DIRECTORY_SEPARATOR.’config.ini’;
$dbconfig=new Zend_Config_Ini($url,null,true);
$db=Zend_Db::factory($dbconfig->general->db->adapter,$dbconfig->general->db->params->toArray());
// var_dump($db);
$db->query(‘SET NAMES UTF8’);
Zend_Db_Table::setDefaultAdapter($db);
}
}
?>

<?php
class Wp_posts extends Zend_Db_Table{
protected $_name = ‘Wp_posts’;
protected $_primary = ‘ID’;
}
?>

使用Zend_Config_Ini(读取ini配置文件)
Zend_Config_Xml(读取XML配置文件)

使用办法

use \GatewayWorker\Lib\Db;
$db1 = Db::instance(‘db1‘);
$db2 = Db::instance(‘db2‘);

// 获取所有数据
$db1->select(‘ID,Sex‘)->from(‘Persons‘)->where(‘sex= :sex‘)->bindValues(array(‘sex‘=>‘M‘))->query();
//等价于
$db1->select(‘ID,Sex‘)->from(‘Persons‘)->where("sex= ‘F‘ ")->query();
//等价于
$db1->query("SELECT ID,Sex FROM `Persons` WHERE sex=‘M’");


// 获取一行数据
$db1->select(‘ID,Sex‘)->from(‘Persons‘)->where(‘sex= :sex‘)->bindValues(array(‘sex‘=>‘M‘))->row();
//等价于
$db1->select(‘ID,Sex‘)->from(‘Persons‘)->where("sex= ‘F‘ ")->row();
//等价于
$db1->row("SELECT ID,Sex FROM `Persons` WHERE sex=‘M’");


// 获取一列数据
$db1->select(‘ID‘)->from(‘Persons‘)->where(‘sex= :sex‘)->bindValues(array(‘sex‘=>‘M‘))->column();
//等价于
$db1->select(‘ID‘)->from(‘Persons‘)->where("sex= ‘F‘ ")->column();
//等价于
$db1->column("SELECT `ID` FROM `Persons` WHERE sex=‘M’");

// 获取单个值
$db1->select(‘ID,Sex‘)->from(‘Persons‘)->where(‘sex= :sex‘)->bindValues(array(‘sex‘=>‘M‘))->single();
//等价于
$db1->select(‘ID,Sex‘)->from(‘Persons‘)->where("sex= ‘F‘ ")->single();
//等价于
$db1->single("SELECT ID,Sex FROM `Persons` WHERE sex=‘M‘");

// 复杂查询
$db1->select(‘*‘)->from(‘table1‘)->innerJoin(‘table2‘,‘table1.uid = table2.uid‘)->where(‘age > :age‘)->groupBy(array(‘aid‘))->having(‘foo="foo"‘)->orderBy(array(‘did‘))->limit(10)->offset(20)->bindValues(arra
y(‘age‘ => 13));
// 等价于
$db1->query(SELECT * FROM `table1` INNER JOIN `table2` ON `table1`.`uid` = `table2`.`uid` WHERE age > 13 GROUP BY aid HAVING foo="foo" ORDER BY did LIMIT 10 OFFSET 20“);

// 插入
$insert_id = $db1->insert(‘Persons‘)->cols(array(‘Firstname‘=>‘abc‘, ‘Lastname‘=>‘efg‘, ‘Sex‘=>‘M‘, ‘Age‘=>13))->query();
等价于
$insert_id = $db1->query("INSERT INTO `Persons` ( `Firstname`,`Lastname`,`Sex`,`Age`) VALUES ( ‘abc‘, ‘efg‘, ‘M‘, 13)");

// 更新
$row_count = $db1->update(‘Persons‘)->cols(array(‘sex‘))->where(‘ID=1‘)->bindValue(‘sex‘, ‘F‘)->query();
// 等价于
$row_count = $db1->update(‘Persons‘)->cols(array(‘sex‘=>‘F‘))->where(‘ID=1‘)->query();
// 等价于
$row_count = $db1->query("UPDATE `Persons` SET `sex` = ‘F‘ WHERE ID=1");

// 删除
$row_count = $db1->delete(‘Persons‘)->where(‘ID=9‘)->query();
// 等价于
$row_count = $db1->query("DELETE FROM `Persons` WHERE ID=9");

在输入文件处,通过一个Zend_Application对象来调用bootstrap(),类Bootstrap的构造函数就会被调用。
在构造函数中,通过Zend_Db::factory()大家就能得到一个操作数据库的对象实例。
通过一个Zend_Config_Ini
实例读取config.ini中有关音信作为参数传递给工厂函数Zend_Db::factory()
config.ini 的信息
[general]
db.adapter =PDO_framework配置操作数据库实例分析,数据库使用示例。MYSQL
db.params.host =localhost
db.params.username =root
db.params.password =
db.params.dbname = 数据库名
Zend_Db::factory()
内部参数一:表示要操作的数据库类型,比如PDO_MYSQL
参数二:表示连接数据库的消息,包涵服务器名,用户名,密码,要连接的数据库

控制器controller上边建立IndexController.php

案例:

先抛出三个提个难点:
①假使我们要操作的数据库是MSSQL,该怎么操作
②这边大家利用的是Zend_Db::factory(),假若我们采纳传统的措施,该怎么操作

复制代码 代码如下:

<?php
require_once("Zend/Loader.php");
Zend_Loader::loadClass('Zend_Config');
$array = array(
  'webhost' => '127.0.0.1',
  'database'=>array(
    'db_host'=>'localhost',
    'db_user'=>'root',
    'db_pass'=>'123',
    'db_name'=>'test'
    )
  );
$config = new Zend_Config($array);
echo "Web服务器地址为:";
echo $config->webhost;
echo "<p>";
echo "数据库服务器名称为:";
echo $config->database->db_host;
echo "<p>";
echo "数据库用户名为:";
echo $config->database->db_user;
echo "<p>";
echo "数据库密码为:";
echo $config->database->db_pass;
echo "<p>";
echo "数据库名称为:";
echo $config->database->db_name;
echo "<p>";

解答:
① 我们只须求在config.ini文件司令员PDO_MYSQL修改成PDO_MSSQL即可
② 传统方法开创一个操作数据库的目的实例:
$db=new Zend_Db_Adapter_Pdo_Mysql($config)
其中:$config信息从config.ini中读取
题材来了:大家运用传统的措施来创制一个目的实例的话,大家必然有一个流水线来判断当前要操作的数据库类型吧?
比如:

<?php
require_once APPLICATION_PATH.’/models/Wp_posts.php’;
class IndexController extends Zend_Controller_Action
{
public function init()
{
/* Initialize action controller here */
}
public function indexAction()
{
$con = new Wp_posts();
$res = $con->fetchAll()->toArray();
$this->view->res = $res;
$this->render(“index”);
}
}

结果:

复制代码 代码如下:

在views/scripts/index/ 建立视图:index.phtml

Web服务器地址为:127.0.0.1
数据库服务器名称为:localhost
数据库用户名为:root
数据库密码为:123
数据库名称为:test

switch ($dbType){
case ‘PDO_MYSQL’:
….
case ‘PDO_MSSQL’:
….
case ‘PDO_SQLITE’:
….
}

复制代码 代码如下:

说明:

大家还得按照差别的数据库类型,写不一致的操作数据库的言语,那样岂不是很麻烦
不过,这一体的全套,zf通过工厂方式都早就帮我们搞好了,使用起来卓殊有利于

<html>
<head>
<title>this is for test</title>
</head>
<body>
<table>
<?php foreach ($this->res as $news){?>
<tr>
<td><?php echo $news[‘id’]?></td>
<td><?php echo $news[‘post_title’]?></td>
<td><?php echo $news[‘post_date’]?> </td>
</tr>
<?php }?>
</table>
</body>
</html>

初始化Zend_Config类时,将数组中的数据直接成为$config对象的属性值了。

Zf中如何是什么样贯彻工厂情势的啊?
率先,得有一个虚无基类:Zend_4858.com ,Db_Adapter_Abstract,该类是工厂方式所创造的有着目的的父类,他肩负提供所有实例要所共有的接口。
该类不仅提供了部分大家充足熟知操作数据库的兑现形式,比如:select,update,insert,delete,query,fetchRow,fetchAssoc;其它,也提供了一部分接口,用以在子类中展开落到实处,比如:limit,getServerVersion,closeConnection,describeTable等等

ok啦,浏览器彰显:
4858.com 1

2.从PHP配置文件读取数据

复制代码 代码如下:

您或许感兴趣的小说:

  • Zend Framework 2.0事件管理器(The
    伊芙ntManager)入门教程
  • Zend
    Framework数据库操作技能统计
  • Zend
    Framework数据库操作方法实例总计
  • Zend
    Framework入门教程之Zend_Db数据库操作详解
  • ZendFramework框架达成一连五个或四个数据库的主意
  • Zend
    Framework教程之连接数据库并执行增删查的措施(附demo源码下载)
  • Zend
    Framework连接Mysql数据库实例分析
  • 剖析怎样行使Zend Framework
    连接数据库
  • windows下zendframework项目环境搭建(通过命令行配置)
  • zend
    framework多模块多布局配置
  • Zend
    Framework开发入门经典教程
  • ZendFramework2连接数据库操作实例

案例:

abstract class Zend_Db_Adapter_Abstract
{
//..
}
abstract class Zend_Db_Adapter_Pdo_Abstract extends
Zend_Db_Adapter_Abstract
{
//..
}
class Zend_Db_Adapter_Pdo_Mysql extends
Zend_Db_Adapter_Pdo_Abstract
{
//…达成针对Mysql数据库的操作
}
class Zend_Db_Adapter_Pdo_Mssql extends
Zend_Db_Adapter_Pdo_Abstract
{
//….达成针对Mssql数据库的操作
}
class Zend_Db_Adapter_Pdo_Sqlite extends
Zend_Db_Adapter_Pdo_Abstract
{
//….完结针对Sqlite数据库的操作
}

(1)首先是布署文件,代码如下。

以上提到可以用一张图不难的象征出来

<?php
return array(
  'webhost' => '127.0.0.1',
  'database' => array(
    'db_host' => 'localhost',
    'db_user' => 'root',
    'db_pass' => '123',
    'db_name' => 'test'
    )
);

4858.com 2
接下去,大家跟踪下Zend_Db::Factory()到底是促成基于分歧的参数拔取区其他数据库的。

(2)创制读取配置的PHP文件,代码如下。

4858.com 3

<?php
require_once("Zend/Loader.php");
Zend_Loader::loadClass('Zend_Config');
$filename = 'config.php';            //定义配置文件名
$config = new Zend_Config(require $filename);  //为类实例化对象
echo "Web服务器地址为:";
echo $config->webhost;
echo "<p>";
echo "数据库服务器名称为:";
echo $config->database->db_host;
echo "<p>";
echo "数据库用户名为:";
echo $config->database->db_user;
echo "<p>";
echo "数据库密码为:";
echo $config->database->db_pass;
echo "<p>";
echo "数据库名称为:";
echo $config->database->db_name;
echo "<p>";

你或许感兴趣的稿子:

  • Zend
    Framework开发入门经典教程
  • Zend Framework入门之环境布置及第四个Hello
    World示例(附demo源码下载)
  • Zend
    Framework入门知识点小结
  • Zend Framework 2.0轩然大波管理器(The
    伊夫ntManager)入门教程
  • Zend
    Framework入门教程之Zend_View组件用法示例
  • Zend
    Framework入门教程之Zend_Registry组件用法详解
  • Zend
    Framework入门教程之Zend_Config组件用法详解
  • Zend
    Framework入门教程之Zend_Session会话操作详解
  • Zend
    Framework入门教程之Zend_Mail用法示例
  • Zend
    Framework入门教程之Zend_Db数据库操作详解
  • Zend
    Framework入门应用实例详解

表明:结果同之前的等同,只是这一次读取数据是从php文件中拿走的。一般须要的布局信息,无非是数量库名,用户名,密码等。

3.从ini文件中读取数据

Zend_Config组件的子类Zend_Config_Ini允许从ini配置文件中读取数据。

案例:

(1)建立一个用于被读取内容的ini配置文件,代码如下。

[database]
hostname = localhost
database.type = mysql
database.host = localhost
database.user = root
database.pass = 123
database.name = test_ini

保存为config.ini

(2)建立读取配置文件内容的PHP文件,代码如下。

<?php
require_once("Zend/Loader.php");
Zend_Loader::loadClass('Zend_Config_Ini');
$filename = 'config.ini';            //定义配置文件名
$config = new Zend_Config_Ini($filename,'database');  //为类实例化对象
echo "数据库服务器名称为:";
echo $config->hostname;
echo "<p>";
echo "数据库类型为:";
echo $config->database->type;
echo "<p>";
echo "数据库用户名为:";
echo $config->database->user;
echo "<p>";
echo "数据库密码为:";
echo $config->database->pass;
echo "<p>";
echo "数据库名称为:";
echo $config->database->name;
echo "<p>";

证实:实例化对象之后,指定相应的参数,就可以动用布置文件中的音讯了。

结果为:

数据库服务器名称为:localhost
数据库类型为:mysql
数据库用户名为:root
数据库密码为:123
数据库名称为:test_ini

4.以数组的款型调用ini中读出的数码

用toArray()方法来贯彻转化

案例:

<?php
require_once("Zend/Loader.php");
Zend_Loader::loadClass('Zend_Config_Ini');
$filename = 'config.ini';            //定义配置文件名
$config = new Zend_Config_Ini($filename,'database');  //为类实例化对象
$temp = $config->database->toArray();      //使得其中一个属性的数据转为数组,并将数据赋给变量$temp
echo "数据库类型为:";
echo $temp[type];
echo "<p>";
echo "数据库用户名为:";
echo $temp[user];
echo "<p>";
echo "数据库密码为:";
echo $temp[pass];
echo "<p>";
echo "数据库名称为:";
echo $temp[name];
echo "<p>";

结果:

数据库类型为:mysql
数据库用户名为:root
数据库密码为:123
数据库名称为:test_ini

5.从XML配置文件中读取数据

透过子类Zend_Config_Xml来实现
root element 超级元素
section-level elements节元素
leaf elements 叶元素

案例:

(1)创造一个XML文件

<?xml version = '1.0'?>
<config>
  <production>
    <webhost>127.0.0.1</webhost>
    <database>
      <type>pdo_mysql</type>
      <host>localhost</host>
      <username>db_user</username>
      <password>db_pass</password>
      <name>test</name>
    </database>
  </production>
  <stag extends="production">
    <database>
      <host>localhost</host>
      <username>db_user</username>
      <password>db_pass</password>
    </database>
  </stag>
</config>

命名为config.xml

(2)建立读取XML文件数量的PHP文件,代码如下。

<?php
require_once("Zend/Loader.php");
Zend_Loader::loadClass('Zend_Config_Xml');
$filename = 'config.xml';            //定义配置文件名
$section = "stag";                //定义需要加载的节名
$config = new Zend_Config_Xml($filename,$section);  //为类实例化对象
echo "服务器地址为:";
echo $config->webhost;
echo "<p>";
echo "数据库类型为:";
echo $config->database->type;
echo "<p>";
echo "数据库用户名为:";
echo $config->database->username;
echo "<p>";
echo "数据库密码为:";
echo $config->database->password;
echo "<p>";

结果:

服务器地址为:127.0.0.1
数据库类型为:pdo_mysql
数据库用户名为:db_user
数据库密码为:db_pass

更多关于zend相关内容感兴趣的读者可查阅本站专题:《Zend
FrameWork框架入门教程》、《php杰出开发框架统计》、《Yii框架入门及常用技巧总计》、《ThinkPHP入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

瞩望本文所述对大家基于Zend Framework框架的PHP程序设计有所辅助。

你或许感兴趣的篇章:

  • 工厂方式在Zend
    Framework中采纳介绍
  • Zend
    Framework开发入门经典教程
  • Zend Framework入门之环境安插及第四个Hello
    World示例(附demo源码下载)
  • Zend
    Framework入门知识点小结
  • Zend Framework 2.0轩然大波管理器(The
    伊芙ntManager)入门教程
  • Zend
    Framework入门教程之Zend_View组件用法示例
  • Zend
    Framework入门教程之Zend_Registry组件用法详解
  • Zend
    Framework入门教程之Zend_Session会话操作详解
  • Zend
    Framework入门教程之Zend_Mail用法示例
  • Zend
    Framework入门教程之Zend_Db数据库操作详解
  • Zend
    Framework入门应用实例详解

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有