Tyvärr,
Det är en PDO_ODBC
64-bitars inkompatibilitetsproblem (#61777
, #64824
) och utan några tvivel är du på en 64-bitars build som inte tillåter dig att binda parametrar.
Lyckligtvis
Den har en patch som först inkluderades i version 5.6:
Vad är fel med din PHP-levererade PDO_ODBC
?
Genom att titta på en av dessa rekommenderade patchar:
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 att det enda som har ändrats är SDWORD
(16-bitars heltal med tecken) som ersätts med ny ODBC-typ SQLULEN
det vill säga 64 bitar i en 64-bitars ODBC-applikation och 32 bitar i en 32-bitars ODBC-applikation
.
Jag tror att committer inte var medveten om colsize
datatyp endast sedan på nästa rad SQLLEN
är korrekt definierad.
Vad ska jag göra nu?
- Uppgradera till PHP-version>=5.6
- Håll dig med
odbc_*
fungerar som en fungerande lösning. - Kompilera en PHP v5.5.9 med medföljande patchar.
- Bygg ditt eget PDO-omslag enligt rekommendationerna av @GordonM