Leider
Es ist ein PDO_ODBC
64-Bit-Inkompatibilitätsproblem (#61777
). , #64824
) und ohne Zweifel befinden Sie sich auf einem 64-Bit-Build, der es Ihnen nicht erlaubt, Parameter zu binden.
Glücklicherweise
Es hat einen Patch das war zuerst in der Version 5.6 enthalten:
Was ist mit dem von Ihrem PHP gelieferten PDO_ODBC
falsch ?
Indem Sie sich einen dieser empfohlenen Patches ansehen:
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;
Wir sehen, dass sich nur SDWORD
geändert hat (16-Bit-Ganzzahl mit Vorzeichen), die durch den neuen ODBC-Typ SQLULEN
ersetzt wird das sind 64 Bit in einer 64-Bit-ODBC-Anwendung und 32 Bit in einer 32-Bit-ODBC-Anwendung
.
Ich glaube, der Committer war sich colsize
nicht bewusst Datentyp nur da in der allernächsten Zeile SQLLEN
richtig definiert ist.
Was soll ich jetzt tun?
- Upgrade auf PHP-Version>=5.6
- Bleiben Sie bei
odbc_*
funktioniert als funktionierende Lösung. - Kompilieren Sie PHP v5.5.9 mit bereitgestellten Patches.
- Erstellen Sie Ihren eigenen PDO-Wrapper, wie von @GordonM empfohlen