Helaas,
Het is een PDO_ODBC
64-bits incompatibiliteitsprobleem (#61777
, #64824
) en je hebt zonder enige twijfel een 64-bits build waarmee je geen parameters kunt binden.
Gelukkig,
Er zit een patch op die voor het eerst was opgenomen in de 5.6-release:
Wat is er mis met de door uw PHP verzonden PDO_ODBC
?
Door naar een van die aanbevolen patches te kijken:
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;
We zien dat het enige dat is veranderd, is SDWORD
(16-bits geheel getal met teken) dat wordt vervangen door het nieuwe ODBC-type SQLULEN
dat is 64 bits in een 64-bits ODBC-toepassing en 32 bits in een 32-bits ODBC-toepassing
.
Ik geloof dat committer niet op de hoogte was van colsize
gegevenstype alleen sinds in de volgende regel SQLLEN
correct is gedefinieerd.
Wat moet ik nu doen?
- Upgrade naar PHP-versie>=5.6
- Blijf bij
odbc_*
functioneert als een werkende oplossing. - Compileer een PHP v5.5.9 met meegeleverde patches.
- Bouw je eigen PDO-wrapper zoals aanbevolen door @GordonM