代码之家  ›  专栏  ›  技术社区  ›  d-_-b

通过Zend框架执行MSSQL存储过程

  •  0
  • d-_-b  · 技术社区  · 15 年前

    请给我一个如何检索(在数组中?)使用Zend框架从MSSQL服务器上的存储过程返回行,并将参数传递给存储过程。

    谢谢!

    5 回复  |  直到 15 年前
        1
  •  0
  •   tawfekov    15 年前

    很抱歉,在ZF AFAIK的当前状态下,您不能运行存储过程

    少了什么?

    一些长期的 准备好的陈述?那怎么办 模型和数据层?

    http://www.phparch.com/2010/06/25/zend-db-2-0-kicks-off/

    在我回答你之后,我从谷歌得到了这个链接,我认为值得一提

    http://zend-framework-community.634137.n4.nabble.com/mssql-pdo-lastInsertID-with-a-stored-procedure-td672685.html

        2
  •  1
  •   Julius Musseau    15 年前

    <?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]
        host = 192.168.8.8
        port = 1433
        tds version = 8.0
    

    当我更改connect主机名以使用该节标题时,我的存储过程就工作了:

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

    呼。

    以下是我的SP供参考:

    CREATE PROCEDURE [dbo].[usp_square_input] 
       @x bigint
    AS 
    SELECT @x * @x AS squared ;
    
        3
  •  1
  •   d-_-b    15 年前

    好的,在花了几个小时研究这个问题之后,我想到了下面的代码——我不使用纯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();
      }     
    }
    }   
    
        4
  •  0
  •   Halil Özgür    15 年前

    $statement = $adapter->prepare("yourSpHere()");
    $statement->execute();
    $results = $statement->fetchAll();
    
        5
  •  0
  •   Kamil Gareev    15 年前

    当您说mssqlstoredproc没有结果时,这是不正确的(当然,如果它返回任何值的话)。

    但如果存在这样的操作,它也会返回插入、更新或删除的应用计数。