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