CakePHP与存储过程

时间:2015-05-15 08:23:09

标签: php mysql cakephp stored-procedures

我正在尝试在Cakephp中创建存储过程。我在MYSQL中创建了Procedure并在AppModel.php中创建了全局函数来命中过程。 AppModel中的函数是sProcedure。现在我有两个条件,我可能有变量从程序返回或可能有直接结果集,例如。我为Pagination创建了。虽然它射击我的程序但没有返回任何结果。我的功能是否需要修改?

    public function sProcedure($name = NULL, $inputParameter = array(), $outputParameter = array()) {
        $this->begin();
        $parameter = "";
        $outputParam = "";
        foreach ($inputParameter as $params) {
            $parameter .= $parameter == "" ? " '$params' " : ", '$params' ";
        }

        if (count($outputParameter) > 0) {
            foreach ($outputParameter as $prm) {
                $outputParam .= $outputParam == "" ? " @$prm " : ", @$prm ";
            }
        }
        $parameter = ($outputParam) ? $parameter . ", " . $outputParam : $parameter;
        $this->query("CALL `$name`($parameter);");
        $result = $this->query("SELECT $outputParam");
        $this->commit();
        return $result;
    }

    $sel_data = $this->ArticleNews->sProcedure("update_blank", $input_prameter, $output);
    debug($sel_data);

3 个答案:

答案 0 :(得分:12)

分解片段

$this->query("CALL `$name`($parameter);");

调用存储过程。让我们假设程序的主体是一个简单的SELECT

SELECT table.* FROM table;

此过程返回结果集。快速浏览一下您提供的代码

 $this->query("CALL `$name`($parameter);");

,会调用该过程,但结果/ resource未分配给iterate的变量。

$proc_result = $this->query("CALL `$name`($parameter);");

$proc_data = array();

if (false !== $proc_result)
{
    while ($proc_row = mysqli_fetch_array($proc_result))
    {
        $proc_data[] = $proc_row; 
    }
}

if (!empty($proc_data))
{
    //do whatever with procedure data
}

相关文档:connector-cpp-tutorials-stored-routines-statements

答案 1 :(得分:4)

使用以下代码调用存储过程cakephp 3

它为我工作.....

$this->connection = ConnectionManager::get('default');
$meritlists = $this->connection->execute("CALL generateMeritList()")->fetchAll('assoc');

答案 2 :(得分:0)

伙计们不要抨击你的头脑

检查这几行:

$sql="CALL `delete_category`(".$id.");";
$db3= ConnectionManager::getDataSource('default');
$db3->query($sql);

保证工作。 getDatasource返回一个$ mysqli对象,以便你可以使用它

查看sp Calling a stored procedure in php

的PHP手册