首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zend_Db_Abstract子类(模型)

Zend_Db_Abstract子类(模型)
EN

Stack Overflow用户
提问于 2011-07-27 18:50:58
回答 1查看 866关注 0票数 0

我对我的应用程序的模型有问题。它应该在mysql数据库中保存一个新用户。

应用程序/config/application.ini

代码语言:javascript
复制
[production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.params.displayExceptions = 1
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.layout.layoutPath = APPLICATION_PATH "/layouts"
resources.frontController.params.displayExceptions = 0
resources.db.adapter = "pdo_mysql"
resources.db.params.host = "localhost"
resources.db.params.username = "root"
resources.db.params.password = "pass"
resources.db.params.dbname = "cms"
resources.db.isDefaultTableAdapter = true

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1

应用程序/控制器/MemberController.php:

代码语言:javascript
复制
public function newAction()
{
    $frmNewMember = new Form_MemberRegisterationForm();
    $frmNewMember->setMethod('post');
    $frmNewMember->setAction('/member/new');
    if ($this->getRequest()->isPost())
    {
        if ($frmNewMember->isValid($_POST))
        {
            $memberModel = new Model_Members();
            // process the data
            $result = true;
            $result = $memberModel->createMember(
                $frmNewMember->getValue('name'), 
                $frmNewMember->getValue('lastName'), 
                $frmNewMember->getValue('uid'), 
                $frmNewMember->getValue('email'), 
                $frmNewMember->getValue('password'));
            if ($result)
            {
                $this->_forward('confirm');
            }
        }
    }
    $this->view->form = $frmNewMember;
}

application/model/Members.php:

代码语言:javascript
复制
public function createMember($name, $lastName, $uid, $email, $password)
{
    // Create row data
    $row = $this->createRow();
    $row->name = $name;
    $row->lastName = $lastName;
    $row->uid = $uid;
    $row->email = $email;
    $row->pasword = md5($password);
    // Save the row
    $row->save();
    $id = $this->_db->lastInsertId();
    return $id;
}

当我单击“发送”按钮时,会发生以下错误:

代码语言:javascript
复制
Fatal error: Undefined class constant 'EXCEPTION_NO_ROUTE' 
in /var/www/project/application/controllers/ErrorController.php on line 11

我知道问题在于$row = $this->createRow();代码。因为当我将整个createMember方法的主体替换为return $true时,没有错误。

更新:

这是我的_initAutoload() in Bootsreap.php。我应该添加一些配置数据库的内容吗?

代码语言:javascript
复制
protected function _initAutoload()
{
    // Add autoloader empty namespace
    $autoLoader = Zend_Loader_Autoloader::getInstance();
    $autoLoader->registerNamespace('CMS_');
    $resourceLoader = new Zend_Loader_Autoloader_Resource(
        array ('basePath' => APPLICATION_PATH, 'namespace' => '', 
            'resourceTypes' => array (
                'form' => array ('path' => 'forms/', 
                    'namespace' => 'Form_' ), 
                'model' => array ('path' => 'models/', 
                    'namespace' => 'Model_' ) ) ));
    // Return it so that it can be stored by the bootstrap
    return $autoLoader;
}

第二次更新:引发的异常是:

/usr/local/zend/share/ZendFramework/library/Zend/Db/Adapter/Pdo/Abstract.php:138堆栈跟踪中消息“SQLSTATEHY000无法通过套接字‘/tmp/mysql.sock(2)连接到本地MySQL服务器的异常”(2):#0 /usr/local/zend/share/ZendFramework/library/Zend/Db/Adapter/Pdo/Mysql.php(96):Zend_Db_Adapter_Pdo_文摘->_ connect () #1 /usr/local/zend/share/ZendFramework/library/Zend/Db/Adapter/Abstract.php(444):Zend_Db_Adapter_Pdo_Mysql->_connect() #2 /usr/local/zend/share/ZendFramework/library/Zend/Db/Adapter/Pdo/Abstract.php(232):Zend_Db_Adapter_抽象->查询(‘描述cms.’,数组) #3 /usr/local/zend/share/ZendFramework/library/Zend/Db/Adapter/Pdo/Mysql.php(156):Zend_Db_Adapter_Pdo_抽象->查询(‘DESCRIBEcms.’) #4 /usr/local/zend/share/ZendFramework/library/Zend/Db/Table/Abstract.php(727):Zend_Db_Adapter_Pdo_Mysql->describeTable('members',‘'cms') #5 /usr/local/zend/share/ZendFramework/library/Zend/Db/Table/Abstract.php(753):Zend_Db_Table_Abstract>_ /usr/local/zend/share/ZendFramework/library/Zend/Db/Table/Abstract.php(1297):_Db_Table_Abstract>_ /var/www/project/application/models/Members.php(33):Zend_Db_Table_Abstract>createRow(/var/www/project/application/models/Members.php(33):,NULL,NULL,/var/www/project/application/controllers/MemberController.php(32):_Members->createMember( '1‘、'1’、‘1’、‘soroush.rabiei@.’,( NULL) #9 /usr/local/zend/share/ZendFramework/library/Zend/Controller/Action.php(512):MemberController->newAction() #10 /usr/local/zend/share/ZendFramework/library/Zend/Controller/Dispatcher/Standard.php(288):MemberController_Action->分派(‘newAction’) #11 /usr/local/zend/share/ZendFramework/library/Zend/Controller/Front.php(945):Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http),对象( /usr/local/zend/share/ZendFramework/library/Zend/Application/Bootstrap/Bootstrap.php(77):)) #12 /usr/local/zend/share/ZendFramework/library/Zend/Application.php(328):Zend_Controller_Front->调度() #13 /usr/local/zend/share/ZendFramework/library/Zend/Application.php(328):Zend_Application_Bootstrap->run() #14 /var/www/project/public/index.php(26):Zend_Application->run() #15 {main}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-30 17:10:41

异常消息非常清楚:

代码语言:javascript
复制
exception 'Zend_Db_Adapter_Exception' with message 'SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)' in /usr/local/zend/share/ZendFramework/library/Zend/Db/Adapter/Pdo/Abstract.php:138

这意味着您的DB驱动程序试图通过服务器上/tmp/mysql.sock中的一个套接字连接到mysql,但找不到它。

你有三个选择:

  • 配置mysql服务器(通过my.cnf),将它的套接字放在/tmp中。此选项应谨慎使用,因为它对使用同一个mysql实例的所有应用程序都有影响。
  • 找到mysql将其放置在套接字的位置,并编辑php.ini以指向该套接字。此选项也必须谨慎使用,因为它对服务器上使用的每个php应用程序都有影响。

示例:;在Pdo_mysql pdo_mysql.default_socket=/mysql.sock的php.ini部分下

  • 将应用程序配置为通过套接字进行连接。这是一个PDO选项,应该将它传递给您的Zend_Db_Adapter构造函数,如此页的示例7所述。

该选项名为unix_socket,并在PDO DSN php.net doc页面中进行了描述。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6849624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档