简体   繁体   English

Zend Framework中的数据库连接

[英]Database Connection in Zend Framework

I am new to ZF. 我是ZF的新手。 I have coded my application.ini here it is: 我在这里将我的application.ini编码为:

[development]
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
resources.view.encoding = "utf-8"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"


phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1
resources.DB.adapter            = "pdo_mysql"
resources.DB.params.host        = "localhost"
resources.DB.params.username    = "root"
resources.DB.params.password    = ""
resources.DB.params.dbname      = "xyz"

here is my index.php 这是我的index.php

              defined('APPLICATION_PATH')
              || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

          // Define application environment
          defined('APPLICATION_ENV')
              || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'development'));

          // Ensure library/ is on include_path
          set_include_path(implode(PATH_SEPARATOR, array(
              realpath(APPLICATION_PATH . '/../library'),
              get_include_path(),
          )));

          /** Zend_Application */
          require_once 'Zend/Application.php';

          // Create application, bootstrap, and run
          $application = new Zend_Application(
              APPLICATION_ENV,
              APPLICATION_PATH . '/configs/application.ini'
          );
          $application->bootstrap()->run();

and here is my bootstrap.php 这是我的bootstrap.php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap{
protected function _initDoctype(){
    $this->bootstrap('view');
    $view = $this->getResource('view');
    $view->doctype(Zend_View_Helper_Doctype::HTML5);
   }
}

now firstly i did my connection like this 现在首先我像这样进行连接

    $params = array('host'         => 'localhost',
            'username'  => 'root',
            'password'    => '',
            'dbname'        => 'xyz'
          );

   $DB      = new Zend_Db_Adapter_Pdo_Mysql($params);
      $DB->setFetchMode(Zend_Db::FETCH_OBJ);
      Zend_Registry::set('DB',$DB);

Later in my queries I used this to retrieve records: 稍后在查询中,我使用它来检索记录:

$registry = Zend_Registry::getInstance();  
$DB = $registry['DB']; and than my query

Now as I have changed my setting mean including bootstrap and application.ini how to achieve the same as I did? 现在,当我更改了我的设置方式(包括bootstrap和application.ini如何实现与我相同的设置? Because in my app everything is like that.. 因为在我的应用程序中,一切都是这样。

Now I am getting this error. 现在我收到此错误。

Notice: Undefined index: DB in 注意:未定义索引:DB in

C:\\xampp\\htdocs\\xyz\\application\\controllers\\LoginController.php on line 59 C:\\ xampp \\ htdocs \\ xyz \\ application \\ controllers \\ LoginController.php,第59行
Fatal error: Call to a member function select() on a non-object in C:\\xampp\\htdocs\\xyz\\application\\controllers\\LoginController.php on line 64 致命错误:在第64行的C:\\ xampp \\ htdocs \\ xyz \\ application \\ controllers \\ LoginController.php中的非对象上调用成员函数select()

Line #59 is 第59行是

 $registry = Zend_Registry::getInstance();  
 $DB = $registry['DB'];

Line #64 is 第64行是

 $select = $DB->select()
     ->from(array('p' => 'phone_service'))
     ->join(array('u' => 'user_preferences'), 'u.phone_service_id = p.phone_service_id')
     ->where('u.user_preferences_name = ?', 'is_user_package_active')
     ->where('p.user_id = ?', $user_id);

Edited 已编辑

if($result->isValid()){
$data = $authAdapter->getResultRowObject(null,'password');
$auth->getStorage()->write($data);
$this->_redirect('/login/controlpannel');}

Now my query can't find $user_id here 现在我的查询在这里找不到$user_id

$data = Zend_Auth::getInstance()->getStorage()->read();  
$user_id = $data->user_id;
  $DB = Zend_Db_Table_Abstract::getDefaultAdapter();

 $select = $DB->select()
     ->from(array('p' => 'phone_service'))
     ->join(array('u' => 'user_preferences'), 'u.phone_service_id = p.phone_service_id')
     ->where('u.user_preferences_name = ?', 'is_user_package_active')
     ->where('p.user_id = ?', $user_id);

That's why I am getting this error 这就是为什么我得到这个错误

Notice: Trying to get property of non-object in in my .phtml file 注意:尝试获取我的.phtml文件中非对象的属性

By default when using 使用时默认

resources.db.*

in your application.ini a default adapter with these settings will be set up (and by default be used in Zend_Db_Table). 在application.ini中,将设置具有这些设置的默认适配器(默认情况下,在Zend_Db_Table中使用)。

As the adapter is already registered as default adapter in Zend_db_Table_Abstract by default, accessing it is as easy as using: 由于默认情况下该适配器已经在Zend_db_Table_Abstract中注册为默认适配器,因此访问它就像使用以下命令一样容易:

$db = Zend_Db_Table_Abstract::getDefaultAdapter();

Another way to get it is to fetch it from the bootstrap-instance, which goes something like this (according to Reference Manual ): 获得它的另一种方法是从bootstrap-instance获取它,它类似于以下内容(根据参考手册 ):

$front = Zend_Controller_Front::getInstance();
$bootstrapResource = $front->getParam('boostrap')->getPluginResource('db');
$db = $boostrapResource->getDbAdapter();

The Zend_Registry is a object so you should be doing: Zend_Registry是一个对象,因此您应该这样做:

$registry = Zend_Registry::getInstance();  
      $DB = $registry->DB;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM