将执行存储过程从PHP发送到Microsoft SQL SERVER

时间:2015-04-04 19:48:13

标签: sql codeigniter sqlsrv

我正在使用代码点火器框架。我一直在尝试执行我在PHP上从Microsoft SQL Server 2008上编写的存储过程(没有参数),但是我收到了一个错误。此存储过程在Microsoft SQL Server上运行良好,没有错误。 我使用sqlsrv作为驱动程序,如果有帮助,我有一个PHP版本5.2。

这是我得到的错误

Error Number: 01000
[Microsoft][SQL Server Native Client 10.0][SQL Server]Executing SQL directly; no cursor
Exec sp_test

以下是我所拥有的代码的一部分

function index(){
  $this->load->database();
  $query=$this->db->query("Exec sp_test");
  var_dump($query->result());
}

我用实际查询替换实际查询,它确实有效,但没有sp调用。任何帮助将不胜感激,我在这方面试了这么久,我无法让它发挥作用。感谢

3 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。删除'EXEC'对我有用。

$ query = $ this-> db-> query(“procedure_name parameter_1,parameter_2”);

答案 1 :(得分:2)

我有一段时间以来一直遇到类似的错误。问题是存储的rpocedure的执行返回了一个状态代码01000/0,这不是错误而是警告,但仍然不知道为什么它会被返回。

无论如何,事情是SP是一个简单的选择,每当我用查询工具运行它时,选择工作得很好,甚至从php调用这个选择codeigniter正确返回的值,但是当我尝试要使用存储过程,它会一直失败。

最后让它工作,解决方案是简单地标记为不将警告作为错误返回。这是一个示例代码:

 $sp = "MOBILE_COM_SP_GetCallXXX ?,?,?,?,?,?,?,?,?,? "; //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);

 //Here's the magic...
 sqlsrv_configure('WarningsReturnAsErrors', 0);

 //Even if I don't make the connect explicitly, I can configure sqlsrv
 //and get it running using $this->db->query....

 $result = $this->db->query($sp,$params);

就是这样。希望它有所帮助

答案 2 :(得分:1)

使用sqlsrv驱动程序连接到MS SQL Server 2008时,我也遇到了类似的问题。我的问题使用以下代码解决:

$result = $this->db->query("PROCEDURE_NAME {$param_1}, {$param_2}")
                   ->result_array();

我有这个帮助那里的人=]