PHP PDO-ODBC, unixODBC ve FreeTDS ile yazdığınız bağlı parametrelerini kullanma

0 Cevap php

Ben bir PHP uygulama bir MS-SQL veritabanı erişmek için aşağıdaki kurulumu kullanarak ediyorum

  • RedHat Enterprise Linux 5
  • PDO ve PDO_ODBC PHP 5.2.14
  • unixODBC 2.2.11
  • Freetds 0.82.1.dev.20100810

Unparametrized sorguları iyi çalışır. Tek sorun "0 [freetds] [SQL Server] Geçersiz imleç durumu (SQLSTATE = 24000)" hataları önlemek için (PDOStatment :: closeCursor ile) tek sonuç tabloları üzerinde imleci kapatmak zorunda ediliyor.

Ama yazdığınız bağlı parametre ile büyük bir sorun yaşıyorum. Bu gibi bir kod kullanarak zaman:

$stmt = $PDO->prepare('INSERT INTO table (column1, column2)  VALUES (:foo, :bar');
$stmt->bindValue(':foo', 21, PDO::PARAM_INT);
$stmt->bindValue(':bar', 42, PDO::PARAM_INT);
$stmt->execute():
if (!$stmt->execute()) {
 var_dump($stmt->errorInfo();
}

Her iki sütun INT nerede. Hatası: Ben bir "metin int ile uyumsuz [SQLSTATE = 22018] 206 [freetds] [SQL Server] İşlenen türü çatışması" olsun.

UnixODBC günlüğüne, ben böyle bir şey olsun

[ODBC][26251][SQLDescribeParam.c][175]
              Entry:
                      Statement = 0x2b73c849fb80
                      Parameter Number = 1
                      SQL Type = 0x7fff9c89e15e
                      Param Def = 0x7fff9c89e154
                      Scale = 0x7fff9c89e15c
                      Nullable = 0x7fff9c89e15a
[ODBC][26251][SQLDescribeParam.c][276]Error: IM001
[ODBC][26251][SQLBindParameter.c][193]
              Entry:
                      Statement = 0x2b73c849fb80
                      Param Number = 1
                      Param Type = 1
                      C Type = 1 SQL_C_CHAR
                      SQL Type = -1 SQL_LONGVARCHAR
                      Col Def = 4000
                      Scale = 5
                      Rgb Value = 0x2b73c941f890
                      Value Max = 0
                      StrLen Or Ind = 0x2b73c93fa1b0
[ODBC][26251][SQLBindParameter.c][339]
              Exit:[SQL_SUCCESS]

Günlüğünün Benim anlayış unixODBC sağ türünü kullanarak parametreleri bağlamak için çalışıyor olmasıdır. Ama freetds (IM001 'Sürücü bu işlevi desteklemiyor' olduğu) işlevini desteklemez. Yani unixODBC uygun yazmaya gerek kalmadan devam ediyor.

Birisi bu tanıyı doğrulamak ya da daha iyi, FreeTDS yılında daktilo bağlı parametre ile bilinen bir sorun olabilir? Evet, onlar PHP PDO kullanarak çalışır ve bunu hwo yapılandırabilirsiniz?

0 Cevap