Bohužel
Je to PDO_ODBC Problém s 64bitovou nekompatibilitou (#61777
, #64824
) a bez jakýchkoliv pochybností jste na 64bitovém sestavení, které vám neumožňuje svázat parametry.
Naštěstí
Má záplatu který byl poprvé zahrnut ve verzi 5.6:
Co je špatného na dodaném PHP PDO_ODBC ?
Když se podíváte na jednu z těchto doporučených oprav:
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;
Vidíme, že jediná věc, která se změnila, je SDWORD (16bitové celé číslo se znaménkem), které je nahrazeno novým typem ODBC SQLULEN to je 64 bitů v 64bitové aplikaci ODBC a 32 bitů v 32bitové aplikaci ODBC
.
Domnívám se, že komisař si nebyl vědom colsize pouze datový typ, protože hned na dalším řádku je SQLLEN je správně definováno.
Co mám teď dělat?
- Upgradujte na verzi PHP>=5.6
- Zůstaňte u
odbc_*funguje jako funkční řešení. - Zkompilujte PHP v5.5.9 s poskytnutými záplatami.
- Vytvořte si vlastní obal PDO podle doporučení @GordonM