2015-04-04 9 views
3

Я использую фреймворк кода. И я пытался выполнить хранимую процедуру (без параметров), которую я написал на Microsoft SQL Server 2008 с PHP, но я получаю сообщение об ошибке. Эта хранимая процедура хорошо работает на Microsoft SQL Server без ошибок. Я использую sqlsrv в качестве драйвера, и, если это помогает, у меня есть версия PHP 5.2.Проблема, выполняющая хранимую процедуру с PHP на сервер Microsoft SQL Server

Это ошибка я получаю

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

Я столкнулся с той же проблемой. Удаление «EXEC» сработало для меня.

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

+0

спасибо человеку, я собираюсь попробовать, что из – user3547086

+0

привет сэр, я последовал вашему решение, но до сих пор не повезло при вызове мой хранимая процедура, которая принимает 4 параметра, но когда я запустить хранимую процедуру на окне MSSQL запрос по его имеет данные для возврата ** return $ this-> db-> query ("pr_proc_1 153, 1, 'N', 'N'") -> result(); **. он возвращает «Нет содержимого» со статусом 204 – Lymuel

1

У меня также была аналогичная проблема при подключении к MS SQL Server 2008 с использованием драйвера sqlsrv. Моя проблема была решена с помощью следующего кода:

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

У меня есть это помогает кто-то там =]

+0

Помог мне! Благодаря! =) – ourmandave

+0

Добро пожаловать =) – Rashy

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); 

Все. Надеюсь, что это помогло

+0

Аналогичный случай случился со мной на тестовой платформе (не на других платформах!). Но не с хранимой процедурой, а с простым «ОБНОВЛЕНИЕМ». Вероятно, из-за конфигурации sql_server. Не имея возможности изменить конфигурацию, это решение было отличным решением. T – MarcM

1

Я столкнулся с данными из хранимой процедуры sql-сервера в кодедикторе, но, наконец, решил его.

$sync= $this->load->database('sync', TRUE); 
    $query = $sync->query('PROCEDURE_NAME')->result_array(); 
    echo '<pre>'; 
    print_r($query);