За съжаление,
Това е PDO_ODBC
Проблем с 64-битова несъвместимост (#61777
, #64824
) и без съмнение сте на 64-битова компилация, която не ви позволява да свързвате параметри.
За щастие,
Има корекция който за първи път беше включен в версията 5.6:
Какво не е наред с изпратения от вашия PHP PDO_ODBC
?
Като разгледате една от тези препоръчани пачове:
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;
Виждаме, че единственото нещо, което е променено, е SDWORD
(16-битово цяло число със знак), което се заменя с нов тип ODBC SQLULEN
това е 64 бита в 64-битово ODBC приложение и 32 бита в 32-битово ODBC приложение
.
Вярвам, че committer не е знаел за colsize
тип данни само, тъй като в следващия ред SQLLEN
е дефиниран правилно.
Какво трябва да направя сега?
- Надстройте до версия на PHP>=5.6
- Придържайте се към
odbc_*
функционира като работещо решение. - Компилирайте PHP v5.5.9 с предоставени пачове.
- Създайте своя собствена PDO обвивка, както е препоръчано от @GordonM