PHP SQL Server saklı yordam çıkış Params

8 Cevap php

PHP, SQL Server bir saklı yordam çalışan yardıma ihtiyacım var. PHP bir Unix / Linux sunucu üzerinde çalışıyor. Biz ÇIKIŞ değişkenler PHP dönmek için alınamıyor. Aşağıdaki PHP kodu:

$conn = mssql_connect('server', 'user', 'pass');
    mssql_select_db('db', $conn);

    $procedure = mssql_init('usp_StoredProc', $conn);

    $tmpVar1 = 'value';
    $tmpVar2 = 'value2';

    $outVar1 = '';
    $outVar2 = '';

    mssql_bind($procedure, "@var1", $tmpVar1, SQLVARCHAR, false, false);
    mssql_bind($procedure, "@var2", $tmpVar2, SQLVARCHAR, false, false);

    mssql_bind($procedure, "@outVar1", $outVar1, SQLVARCHAR, true);
    mssql_bind($procedure, "@outVar2", $outVar2, SQLVARCHAR, true);

    mssql_execute($procedure,$conn);

    print($outVar1);
    print($outVar2);

Saklı yordam böylece gibi görünüyor:

    SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER proc [dbo].[usp_StoredProc]
(
    @var1 as varchar(36), 
    @var2 as varchar(10), 
    @outVar1 varchar(36) OUTPUT, 
    @outVar2 varchar(36) OUTPUT 
)
as
  select distinct 
    @outVar1 = row1, 
    @outVar2 = row2
  from table1
  where column1 = @var1
    and column2 = @var2

$ OutVar1 ve $ outVar2 doldurulur olmama neden kimse bana söyleyebilir misiniz? Teşekkürler herhangi bir yardım için bir sürü!

8 Cevap

Göre this page on PHP bugs, sen (vurgu mayın) var:

call mssql_next_result() for each result set returned by the SP. This way you can handle multiple results.

When mssql_next_result() returns false you will have access to output parameters and return value.

Çıkış alanlarının özel uzunlukları Dene belirten

mssql_bind($procedure, "@outVar1", &$outVar1, SQLVARCHAR, true, false, 36);
mssql_bind($procedure, "@outVar2", &$outVar2, SQLVARCHAR, true, false, 36);

Bir fark yaparsa ve görmek.

Ayrıca, açık ve dikkat hala gerekli ise veya değil bilmiyorum ama, referans çıkış değişkenler geçmek.

Yürütmek ihtiyaçlarının ikinci param yerine bağl daha gerçek olmak. Bu çalışması gerekir:

$conn = mssql_connect('server', 'user', 'pass');
mssql_select_db('db', $conn);

$procedure = mssql_init('usp_StoredProc', $conn);

$tmpVar1 = 'value';
$tmpVar2 = 'value2';

$outVar1 = '';
$outVar2 = '';

mssql_bind($procedure, "@var1", $tmpVar1, SQLVARCHAR, false, false);
mssql_bind($procedure, "@var2", $tmpVar2, SQLVARCHAR, false, false);

mssql_bind($procedure, "@outVar1", $outVar1, SQLVARCHAR, true);
mssql_bind($procedure, "@outVar2", $outVar2, SQLVARCHAR, true);

mssql_execute($procedure,true);

print($outVar1);
print($outVar2);

Ben bu soruna neden olan şüphe, ama neden DISTINCT kullanıyorsunuz?

Bu sadece bir codesmell - sen olduğunu görmek her zaman, bu DISTINCT ile "ele" ediliyor çiftleri dönen bir potansiyel var demektir ve neden çiftleri iade olacağını muhtemelen baktı gerekmektedir.

PHP emin değil hangi sürümünü çalıştırıyorsanız, ama sen yine çıkıp değerini almak için referans değişkenleri geçmek için gerekli büyük olanlar bazı düşünüyorum:

Yani & koymak gerekiyordu charcter işlevi çağrılırken değişkenden önce:

mssql_bind($procedure, "@outVar1", &$outVar1, SQLVARCHAR, true);
mssql_bind($procedure, "@outVar2", &$outVar2, SQLVARCHAR, true);

Ayrıca uygun this link bazı sürümleri çıktı paramters ile bir sorunu vardı

Hm. Bir kaç yorum

1) "mssql_execute ($ prosedür, $ conn);" 2. parametre bağlantı olmadığını yanlıştır.

2) Eğer alıyorsanız o zaman ben freetds.conf bir DB dizi oluşturmak ve bu referans vardı "saklı yordam yürütme başarısız oldu".

Bu noktada, ben hataları alamadım ama ya çıktı params alamadım. Bu RHEL5 PHP 5.1.

Ben freetds günlüğü etkinleştirmek, ben veri geri dönüş paketi geri gelip bakın. Çalışmıyor, ya neden bu noktada, ben bilmiyorum (PHP için SQL server desteği dışında biraz eksik!)

Ben aynı sorunları yaşıyorum.

SQL Server ile iletişim kurmak için freetds sürücüsünü kullandığınızdan emin küstah sürücü çalışır yolu ile bilinen bir sorun vardır. Bu SSS vurgulanır

http://www.freetds.org/faq.html#ms.output.parameters

SSS önerilmektedir ne için API docs burada ama ben PHP ile bu erişmek için bir yol bulamıyorum:

http://www.freetds.org/reference/a00276.html

Ben hala bu bağladım alamayan ve ben hep birlikte çıkış parametreleri vazgeçmek için gidiyorum noktada duyuyorum.

i çok basit bir şekilde adodb Kütüphanesi ile bu yapmış ...

$ AddProduct = $ obj-> ExecuteQuery ("Begin (); varchar 100 @ ÜrünKodu BEYAN; EXEC CREATEPRODUCT '$ pname', '$ fiyat', @ ProductCode ÇIKTI, '$ merchantId'; @ ÜrünKodu seçin; End;") ;

$ ProductCode = $ addProduct [0] [0];

for more explanation you can visit this site.. http://developer99.blogspot.com/2011/07/calling-ms-sql-sp-from-php.html