Desværre,
Det er en PDO_ODBC 64-bit inkompatibilitetsproblem (#61777
, #64824
) og uden tvivl er du på en 64-bit build, som ikke tillader dig at binde parametre.
Heldigvis
Den har en patch som først blev inkluderet i 5.6-udgivelsen:
Hvad er der galt med din PHP's afsendte PDO_ODBC ?
Ved at se på en af de anbefalede patches:
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;
Vi ser, at det eneste, der er ændret, er SDWORD (16-bit fortegnet heltal), som erstattes med ny ODBC type SQLULEN det er 64 bit i en 64-bit ODBC-applikation og 32 bit i en 32-bit ODBC-applikation
.
Jeg tror, at committer ikke var klar over colsize datatype kun siden i den allernæste linje SQLLEN er defineret korrekt.
Hvad skal jeg gøre nu?
- Opgrader til PHP-version>=5.6
- Bliv ved med
odbc_*fungerer som en fungerende løsning. - Kompiler en PHP v5.5.9 med medfølgende patches.
- Byg din egen BOB-indpakning som anbefalet af @GordonM