Выполнить хранимую процедуру MSSQL через Zend Framework - PullRequest
0 голосов
/ 17 сентября 2010

Запрос: Пожалуйста, покажите мне рабочий пример того, как получить (в массиве?) Возвращенные строки из хранимой процедуры на сервере MSSQL с использованием Zend Framework и передать параметры в хранимую процедуру.

Объяснение:Я не могу найти ничего в документации ZF о том, как выполнить SP на серверах MSSQL.Я знаю, что это возможно через обычный PHP.Однако, поскольку в моем проекте используется ZF, мне не нужно иметь дополнительный код для открытия соединения с сервером и т. Д. И т. Д. Копаясь в коде ZF, я вижу такие вещи, как "bindParam" и "execute" и "prepare».Однако я понятия не имею, как они работают или что мне с ними делать.Поэтому, конечно, было бы неплохо немного пояснить запрошенный пример кода.

Кстати, я использую Zend_Db_Adapter_Pdo_Mssql.

Спасибо!

Ответы [ 5 ]

1 голос
/ 12 июля 2011

Хорошо, потратив пару часов на изучение проблемы, я пришел к следующему коду: я не использую чистый PHP, все еще пользуясь фреймворком соответственно. Кажется, что все в порядке и работает хорошо, я даже получаю обратно набор результатов! Надеюсь, это поможет:

class Model_DbTable_Cases extends Zend_Db_Table_Abstract 
{
  // ... code ...

public function addRelocationServiceCase($maincase_id, $product_id)
{
  try {
    $stmt = $this->getAdapter()->prepare("EXEC Web_AddRelocationCase ?, ?");    

    $stmt->bindParam(1, $maincase_id, PDO::PARAM_STR);
    $stmt->bindParam(2, $product_id, PDO::PARAM_STR);
    $stmt->execute();

    $rows = $stmt->fetchAll();

    die(var_dump($rows));
    Zend_Debug::dump($rows);

    $stmt->closeCursor();
  }
  catch (Zend_Db_Adapter_Exception $e) {
    print $e->__toString();
  }
  catch (PDOException $e) {
    print $e->__toString();
  }
  catch (Zend_Exception $e) {
    print $e->__toString();
  }     
}
}   
1 голос
/ 17 ноября 2010

Вот что я сделал, используя драйвер php5-sybase в Debian.Это обычный PHP, так что, вероятно, это не то, что вам нужно, но, возможно, это даст вам некоторые подсказки.Даже сделать это с помощью простого PHP было для меня на удивление сложно!

<?php

$db = mssql_connect('vm8', 'user', 'password');
mssql_select_db('myDatabase', $db); 
$stmt = mssql_init('dbo.usp_square_input', $db);

$var = 9;
mssql_bind($stmt, '@x', $var, SQLINT1, false, false, 50);
$result = mssql_execute($stmt);
if ($result) {
  $row = mssql_fetch_array($result, MSSQL_NUM);
  echo $row[0];
  mssql_free_result($result);
}

?>

ПРИМЕЧАНИЕ. Эта вещь "vm8" происходит из файла /etc/freetds/freetds.conf, и ничего не будет работать, пока я не создаюПсевдоним "vm8" там.

НЕ РАБОТАЛ (хотя не с SP все было в порядке!?!?!).

$db = mssql_connect('192.168.8.8', 'user', 'password');

Но после того, как я создал раздел "vm8" (мое собственное имя) внутри /etc/freetds/freetds.conf примерно так ...

[vm8]
    host = 192.168.8.8
    port = 1433
    tds version = 8.0

Тогда мои хранимые процедуры сработали, как только я изменил имя хоста соединения для использования заголовка этого раздела:

$db = mssql_connect('vm8', 'user', 'password');

Вот так.

Для справки здесь был мой ИП:

CREATE PROCEDURE [dbo].[usp_square_input] 
   @x bigint
AS 
SELECT @x * @x AS squared ;
0 голосов
/ 02 сентября 2011

Когда вы сказали, что в MS SQL STORED PROC нет результата - он неверен (если он возвращает какое-либо значение, конечно).

Но он также возвращает вставленные, обновленные или удаленные примененные отсчеты, если есть такие операции.

А если вы создадите временную таблицу в начале процедуры - попытайтесь угадать, что вы получите.

Таким образом, вам нужно вставить SET NOCOUNT ONN в начале процесса, чтобы не возвращать такие результаты.

0 голосов
/ 20 ноября 2010

Извините, но вы не можете запустить хранимую процедуру в текущем состоянии ZF AFAIK. почему ..... посмотрите здесь

Чего не хватает?

А как насчет некоторых продолжительных запросы функций для Zend Db, например хранимые процедуры, наборы символов и поддержка запросов, которые не могут выполняться как готовые заявления? Как насчет проясняя разницу между Модель и слой данных?

Источник: http://www.phparch.com/2010/06/25/zend-db-2-0-kicks-off/

обновление: После того как я ответил вам, я получил эту ссылку от Google, и я думаю, что стоит упомянуть

http://zend -framework-community.634137.n4.nabble.com / MSSQL-PDO-lastInsertID-с-хранимой процедуры-td672685.html

0 голосов
/ 15 ноября 2010

Разве что-то не работает?

$statement = $adapter->prepare("yourSpHere()");
$statement->execute();
$results = $statement->fetchAll();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...