Sayangnya,
Ini adalah PDO_ODBC
Masalah ketidakcocokan 64-bit (#61777
, #64824
) dan tanpa ragu Anda menggunakan versi 64-bit yang tidak memungkinkan Anda untuk mengikat parameter.
Untungnya,
Ada patch yang pertama kali disertakan dalam rilis 5.6:
Apa yang salah dengan PDO_ODBC
PHP Anda yang dikirimkan ?
Dengan melihat salah satu patch yang direkomendasikan:
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;
Kami melihat satu-satunya hal yang berubah adalah SDWORD
(Integer bertanda 16-bit) yang diganti dengan tipe ODBC baru SQLULEN
yaitu 64 bit dalam aplikasi ODBC 64-bit dan 32 bit dalam aplikasi ODBC 32-bit
.
Saya yakin committer tidak mengetahui colsize
tipe data hanya karena di baris berikutnya SQLLEN
didefinisikan dengan benar.
Apa yang harus saya lakukan sekarang?
- Tingkatkan ke versi PHP>=5.6
- Tetap menggunakan
odbc_*
berfungsi sebagai solusi yang berfungsi. - Mengkompilasi PHP v5.5.9 dengan patch yang disediakan.
- Buat pembungkus PDO Anda sendiri seperti yang direkomendasikan oleh @GordonM