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