Rất tiếc,
Đó là một PDO_ODBC
Sự cố không tương thích 64-bit ( # 61777
, # 64824
) và không nghi ngờ gì nữa, bạn đang sử dụng phiên bản 64-bit không cho phép bạn ràng buộc các tham số.
May mắn thay,
Nó có một bản vá lần đầu tiên được đưa vào bản phát hành 5.6:
Có vấn đề gì với PDO_ODBC
của PHP được vận chuyển ?
Bằng cách xem xét một trong những bản vá được đề xuất đó:
diff --git a/ext/pdo_odbc/odbc_stmt.c b/ext/pdo_odbc/odbc_stmt.c
index 8b0ccf3..1d275cd 100644
--- a/ext/pdo_odbc/odbc_stmt.c
+++ b/ext/pdo_odbc/odbc_stmt.c
@@ -551,7 +551,7 @@ static int odbc_stmt_describe(pdo_stmt_t *stmt, int colno TSRMLS_DC)
struct pdo_column_data *col = &stmt->columns[colno];
RETCODE rc;
SWORD colnamelen;
- SDWORD colsize;
+ SQLULEN colsize;
SQLLEN displaysize;
Chúng tôi thấy điều duy nhất được thay đổi là SDWORD
(Số nguyên có dấu 16 bit) được thay thế bằng loại ODBC mới SQLULEN
đó là 64 bit trong ứng dụng ODBC 64 bit và 32 bit trong ứng dụng ODBC 32 bit
.
Tôi tin rằng người cam kết không biết về colsize
chỉ kiểu dữ liệu kể từ dòng tiếp theo SQLLEN
được định nghĩa đúng.
Tôi nên làm gì bây giờ?
- Nâng cấp lên phiên bản PHP> =5.6
- Gắn bó với
odbc_*
hoạt động như một giải pháp hiệu quả. - Biên dịch PHP v5.5.9 với các bản vá được cung cấp.
- Tạo trình bao bọc PDO của riêng bạn theo đề xuất của @GordonM