mssql_bind boş dize NULL dönüştürme

4 Cevap php

Şu anda PHP ile SQL Server 2000 Stored Procedures kullanıyorum. PHP doc ardından, mssql_bind parametrelerin değeri atamak ve sonra saklı yordam yürütmek için kullanın.

Sorun bana (Saklanan Proc denilen aldığında onlar NULL dönüştürülür) parametrelere boş dizeler bağlamak için engeller this bug ki var olduğunu

Ben onun null sonra boş bir dizeye geri dönüştürmek kontrol etmek procedure içinde her parametre dönüştürmek zorunda istiyorum dont't. Ben hem kendi anlamı boş dizeleri yanı sıra NULL kullanmak mümkün olmak istiyorum.

Herkes PHP bunun için bir çözüm biliyor mu? Bu hata düzeltildi eğer PHP hata sitesi çok net değil ya da sabit olacak, ben (5.2 dalından son sürümünü) PHP 5.2.11 kullanın

4 Cevap

Eğer önerilen ne yapmak istemiyorum varsayarak, seçenekler sizin için bıraktı

  1. Php bir cvs anlık indirin ve uygulanabilir eğer yükleme, sabit olmadığını görmek. Cvs yoluyla canlı veya sabit değilse o zaman ...
  2. Kullanım sistemi () veya exec () depolanmış prosedürleri kullanmak için çağırır. Çok fazla bir güçlük daha sonra eğer ...
  3. Php veya diğer komut dosyası kodu sizin fonksiyonelliği, saklı prosedürler kullanmayın.
  4. Dizeleri'' için başka bir değer kabul etmek ve bir'' dizeye BU dönüştürmek için saklı yordam değiştirebilir.
  5. Yapmak istemedim ne yapmak. Harsh: P Ama başka bir yol göremiyorum.

bug #44325 sorunu çözmek için bir yama önerdi, ancak php_mssql uzantısı kodunda değil bu sorun ntwdblib.dll olduğu gibi görünüyor, doğru bir çözüm değildi ve.

Oplot dot com alexr gelen yoruma bakın:

I'm sorry. This bug is not fixed. This is a bug of the ntwdblib.dll. And after latest updates the bug is return.

When I bind a empty string, the stored procedure received a chr(0) char instead a empty string.

Please roll back last fixes. This bug is irrecoverable.

Bu göz önüne alındığında, ben :-( PHP tarafında yapılabilir ki çok emin değilim

Windows üzerinde PHP + MSSQL ile çalıştı son kez, ben aslında, bu bir bazı oldukça benzer gibi sorunların oldukça çok şey vardı ;-(

Belki olası bir çözüm, sizin için, yeni SQL Server Driver for PHP sürücüsü geçmek için olabilir? O sadece olsa, Windows üzerinde çalışır Not ...

Ben şahsen test etmek için kullanılabilir bir MSSQL sunucusu yok ama doğrudan PDO kullanarak yerine mssql denediniz mi?

PDOStatement->bindValue( mixed $parameter  , mixed $value  [, int $data_type  ] )

bindValue()

Evet, işe yarayabilir, ben PDO sadece bir sarıcı olduğunu biliyoruz ama kim bilir! :)

Ben çalışacak bir çözüm var.

Ben ADODB kullanıyorum (ama bu önemli değil) ve ben mssql sürücü (adodb5 sürücüleri klasöründe adodb-mssql.inc.php) kesmek var.

burada kodu

if($var === ''){
        //stupid hack to prevent mssql driver from converting empty strings to null. now they arent empty strings but they will get trimmed down to legth 0 ;-)
        $var = ' ';
        $type = SQLVARCHAR;
        $isNull = false;
        $maxLen = 0;
    }

sadece boş bir dize bağlamaya çalıştığınız kontrol ve eğer olmayan boş olarak değiştirin. Eğer ben sadece bir boşluk kullanmak kullanmak ne değeri önemli değil.

tipi yapmak bir sqlvarchar isnull false olmalıdır ve şimdi hile mssql sürücüsü boş bir dize için dize Döşeme olacaktır böylece enbüyük 0 yapmaktır.

bariz değilse bu değişkenlerin mssql_bind işlevine passsed almalısınız.