ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php-改进我的Zend存储过程调用代码

2019-12-10 05:18:10  阅读:225  来源: 互联网

标签:zend-framework mysql php stored-procedures


我想知道如何改善我的调用存储过程的Zend代码.目前,我正在使用MySQL数据库,并且下面的控制器中的action函数有效,但似乎令人讨厌.

public function callSPAction()
{
    $param = $this->_request->getParam('param', 0);

    $bootstrap = $this->getInvokeArg('bootstrap');
    $config = $bootstrap->getOptions();

    $mysqli = new mysqli(
        $config['resources']['db']['params']['host'],
        $config['resources']['db']['params']['root']['username'],
        $config['resources']['db']['params']['root']['password'],
        $config['resources']['db']['params']['dbname']);

    $rs = $mysqli->query(sprintf('CALL mystoredprocedure(%d)',$param));
    if(mysqli_error($mysqli))
    { 
        throw new exception(mysqli_error($mysqli), mysqli_errno($mysqli)); 
    } 
    $this->_helper->redirector('index', 'index');
}

我更喜欢使用Zend_DB类来调用存储过程,但是我不确定该怎么做?

由于我正在调用许多存储过程,因此我认为最好创建一个帮助程序类来包装用于连接到数据库的逻辑.它将公开包装基础存储过程的方法.然后我的控制器代码就可以调用

StoredProcedureHelper::callMyStoredProdecure($this->_request->getParam('param', 0);

这可能甚至建议吗?

解决方法:

我希望使用模型进行数据访问.另外,我建议您在应用程序的配置文件中定义数据库适配器,以使其对应用程序代码透明,并使用PDO,这样您的应用程序就不必与特定的数据库管理器绑定,以防万一您需要指向数据库中的其他数据库.未来.

例如,除了将所有数据访问逻辑都包含在控制器的操作中之外,还可以将其简化如下:

//within some controller action
$model = MyUbberCoolSuperModel();
$model->myUbberCoolMethod($params);

//And in your model, which can extend Zend_Db_Table_Abstract
public function myUbberCoolMethod($params)
{
   $pdo = $this->getAdapter()->prepare("CALL myProcedure(:param)");
   $pdo->bindParam(':param', $param, PDO::PARAM_STR); 
   $pdo->execute();
   // Any additional logic you might want to do
}

我认为这种方式更清楚,您的控制器仅负责调用模型上的方法,而模型则负责数据访问.因此,如果需要重构,更改或更改与数据访问相关的任何内容,则可以知道必须使用哪种模型,而不必更改任何可能影响其他因素的控制器操作.

希望能帮助到你

标签:zend-framework,mysql,php,stored-procedures
来源: https://codeday.me/bug/20191210/2099195.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有