Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

संदेश के साथ 'पीडीओएक्सप्शन' 'एसक्यूएलएसटीएटी [22001]:स्ट्रिंग डेटा, सही छोटा:0

दुर्भाग्य से,

यह एक 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 ठीक से परिभाषित किया गया है।

अब मुझे क्या करना चाहिए?

  1. PHP संस्करण में अपग्रेड करें>=5.6
  2. स्टिक विथ odbc_* एक कार्यशील समाधान के रूप में कार्य करता है।
  3. एक PHP v5.5.9 प्रदान किए गए पैच के साथ संकलित करें।
  4. @GordonM द्वारा सुझाए गए अनुसार अपना खुद का पीडीओ रैपर बनाएं


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर डायग्नोस्टिक्स चलाने के लिए 4 युक्तियाँ

  2. Windows 10 UWP ऐप से SQL सर्वर डेटाबेस से कैसे कनेक्ट करें

  3. SQL सर्वर ROWCOUNT_BIG ()

  4. क्लस्टर्ड इंडेक्स को किस कॉलम पर रखा जाना चाहिए?

  5. क्या मुझे varchar या int की प्राथमिक कुंजी वाली तालिका डिज़ाइन करनी चाहिए?