दुर्भाग्य से,
यह एक 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 बिट और 32 बिट ओडीबीसी एप्लीकेशन में 32 बिट है।
।
मेरा मानना है कि कमिटर को colsize
. के बारे में पता नहीं था डेटा प्रकार केवल अगली पंक्ति में SQLLEN
ठीक से परिभाषित किया गया है।
अब मुझे क्या करना चाहिए?
- PHP संस्करण में अपग्रेड करें>=5.6
- स्टिक विथ
odbc_*
एक कार्यशील समाधान के रूप में कार्य करता है। - एक PHP v5.5.9 प्रदान किए गए पैच के साथ संकलित करें।
- @GordonM द्वारा सुझाए गए अनुसार अपना खुद का पीडीओ रैपर बनाएं