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?