Niestety
To PDO_ODBC
64-bitowy problem z niezgodnością (#61777
, #64824
) i bez żadnych wątpliwości korzystasz z wersji 64-bitowej, która nie pozwala na wiązanie parametrów.
Na szczęście
Ma łatkę który został po raz pierwszy zawarty w wydaniu 5.6:
Co jest nie tak z dostarczonym PDO_ODBC
PHP? ?
Patrząc na jedną z tych zalecanych poprawek:
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;
Widzimy, że jedyną zmianą jest SDWORD
(16-bitowa liczba całkowita ze znakiem), która została zastąpiona nowym typem ODBC SQLULEN
czyli 64 bity w 64-bitowej aplikacji ODBC i 32 bity w 32-bitowej aplikacji ODBC
.
Wydaje mi się, że zgłaszający nie był świadomy colsize
typ danych tylko dlatego, że w następnej linii SQLLEN
jest prawidłowo zdefiniowany.
Co mam teraz zrobić?
- Uaktualnij do wersji PHP>=5.6
- Trzymaj się
odbc_*
działa jako działające rozwiązanie. - Skompiluj PHP w wersji 5.5.9 z dostarczonymi łatami.
- Zbuduj własne opakowanie PDO zgodnie z zaleceniami @GordonM