Malheureusement,
C'est un PDO_ODBC
Problème d'incompatibilité 64 bits (#61777
, #64824
) et sans aucun doute vous êtes sur une version 64 bits qui ne vous permet pas de lier les paramètres.
Heureusement,
Il a un correctif qui a été inclus pour la première fois dans la version 5.6 :
Quel est le problème avec le PDO_ODBC
expédié de votre PHP ? ?
En consultant l'un de ces correctifs recommandés :
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;
Nous voyons que la seule chose qui a changé est SDWORD
(entier signé 16 bits) qui est remplacé par le nouveau type ODBC SQLULEN
c'est-à-dire 64 bits dans une application ODBC 64 bits et 32 bits dans une application ODBC 32 bits
.
Je crois que le committer n'était pas au courant de colsize
type de données uniquement puisque dans la toute prochaine ligne SQLLEN
est défini correctement.
Que dois-je faire maintenant ?
- Passer à la version PHP>=5.6
- Reste avec
odbc_*
fonctionne comme une solution de travail. - Compilez un PHP v5.5.9 avec les correctifs fournis.
- Construisez votre propre wrapper PDO comme recommandé par @GordonM