使用存储过程中的returing参数并在cakephp3中使用它

时间:2018-03-23 07:49:14

标签: cakephp stored-procedures cakephp-3.x

我在cakephp3模型中调用了一个存储过程。我需要从存储过程中获取返回值并在cakephp3中使用它,该怎么做。

$conn = ConnectionManager::get('default');
$result = $conn->execute("call custom_sp($currentId, @msg)");

1 个答案:

答案 0 :(得分:0)

首先,请始终使用预准备语句,您永远不知道接收到的值或被调用过程是否可能在某些时候发生变化,这可能会导致SQL注入漏洞!

话虽如此,这取决于您的存储过程究竟是做什么的。如果仅SELECT将值OUT添加到SELECT参数中,则必须发出其他@msg语句并选择$connection = ConnectionManager::get('default'); $statement = $connection->prepare('call custom_sp(:id, @msg)'); $statement->bindValue('id', 1, 'integer'); $statement->execute(); $statement->closeCursor(); $statement = $connection->execute('SELECT @msg'); $result = $statement->fetch('assoc'); $statement->closeCursor(); 变量。

SELECT

如果存储过程本身发出了额外的$statement = $connection->prepare('call custom_sp(:id, @msg);'); $statement->bindValue('id', $currentId, 'integer'); $statement->execute(); $result = $statement->fetch('assoc'); $statement->closeCursor(); 查询,那么第二个查询将不是必需的,您可以从第一个语句中获取数据:

private void ModifyKey(int oldKey, int newKey, Dictionay<int, List<string>> dict)
{
    var data = dict[oldKey];
    // Now remove the previous data
    dict.Remove(key);
    try
    {
        dict.Add(newKey, data);
    }
    catch
    {
        // one already exists..., perhaps roll back or throw
    }
}

另见