从php codeigniter调用存储过程
查找了一周,没有找到可用于执行存储过程的内容。 情景: 我已在探查器窗口中复制了SQL Server 2014 management上运行的代码 我打开了sqlstudio和HeidiSQL并运行查询,它运行正常并返回预期结果 当我尝试粘贴和修改此内容以获得与在SQL客户机上相同的结果时,它的运行方式与在SQL客户机上的运行方式不同。 我怎样才能做到这一点 例如:在我的SQL中,我有128个变量,我必须声明它们才能运行存储过程,但更简单的是,我只发布一个变量,记住sintaxe与一个或128个变量相同,对吗从php codeigniter调用存储过程,php,sql-server,sql-server-2008,codeigniter,stored-procedures,Php,Sql Server,Sql Server 2008,Codeigniter,Stored Procedures,查找了一周,没有找到可用于执行存储过程的内容。 情景: 我已在探查器窗口中复制了SQL Server 2014 management上运行的代码 我打开了sqlstudio和HeidiSQL并运行查询,它运行正常并返回预期结果 当我尝试粘贴和修改此内容以获得与在SQL客户机上相同的结果时,它的运行方式与在SQL客户机上的运行方式不同。 我怎样才能做到这一点 例如:在我的SQL中,我有128个变量,我必须声明它们才能运行存储过程,但更简单的是,我只发布一个变量,记住sintaxe与一个或128个变
declare @var01 varchar(1000) set @var01='.$var01.'
EXEC
stored_procedure_y
@var01 output
SELECT
@var01 AS any_value
我尝试了许多方法来执行SQL命令,但都没有成功。
我尝试运行的一些示例:
- 最后
不工作$declare_vars = 'declare @var01 varchar(1000) set @var01='.$var01.'; $exec_sp = 'EXEC operacao_sitef @var01 output; $select_retorno = 'SELECT @var01 AS any_value; $queryDeclare = $this->db->query($declare_vars); $queryExec = $this->db->query($exec_sp); $queryRetorno = $this->db->query($select_retorno); return $queryRetorno;
- 其他
$query = $this->db->query(' declare @var01 varchar(1000) set @var01='.$var01.' EXEC operacao_sitef @var01 output SELECT @var01 AS any_value '); return $query;
任何帮助都将不胜感激。我是SP的新手,不知道如何使用codeigniter调用此函数并收集结果以完成操作。很高兴地说,我将继续我的工作 这是解决我问题的帖子。 记住我在php和mssql数据库上使用codeigniter: 在模型中:
public function execute_sp($var1 = NULL,$var2 = NULL, $var3 = NULL, $var4 = NULL, $var5 = NULL, $var6 = NULL, $var7 = NULL, $var8 = NULL, $var9 = NULL, $var10 = NULL){
$sp = "stored_procedure_name ?,?,?,?,?,?,?,?,?,? "; //No exec or call needed
//No @ needed. Codeigniter gets it right either way
$params = array(
'PARAM_1' => NULL,
'PARAM_2' => NULL,
'PARAM_3' => NULL,
'PARAM_4' => NULL,
'PARAM_5' => NULL,
'PARAM_6' => NULL,
'PARAM_7' => NULL,
'PARAM_8' => NULL,
'PARAM_9' => NULL,
'PARAM_10' =>NULL);
$result = $this->db->query($sp,$params);
在控制器中:
$var1 = 'value';
$var2 = 'value';
$var3 = 'value';
$var4 = 'value';
$var5 = 'value';
$var6 = 'value';
$var7 = 'value';
$var8 = 'value';
$var9 = 'value';
$var10 = 'value';
$this->model->sp($var1, $var2, $var3, $var4, $var5, $var6, $var7, $var8, $var9, $var10);
它起作用了
帮助很大的来源:用户@Ulises Burlando的回复我就是这样解决的
function () {
$query = $this->db->query("EXEC USP_RoughBlockStockRegister'08/23/2017','08/23/2017',1,1");
return $query->result();
}
我正在使用PDO驱动程序
simple_query方法返回PDOStatement对象和一个重要点集合NOCOUNT ON
class Pump_Model extends CI_Model
{
public function getPumpStatisticSpById($pumpId)
{
$result = $this->db->simple_query("SET NOCOUNT ON
DECLARE @return_value int
EXEC @return_value = [dbo].[spPumpStatistics]
@PumpID = $pumpId")->fetch(PDO::FETCH_OBJ);
return $result;
}
}
很高兴知道。可能会帮助PDO患者。在我的例子中,我不能使用PDO,因为系统使用的是MSSQL驱动程序,而EXEC不是使用AmazonRDS的选项