Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

'PDOException' със съобщение 'SQLSTATE[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-битово ODBC приложение и 32 бита в 32-битово ODBC приложение .

Вярвам, че committer не е знаел за colsize тип данни само, тъй като в следващия ред SQLLEN е дефиниран правилно.

Какво трябва да направя сега?

  1. Надстройте до версия на PHP>=5.6
  2. Придържайте се към odbc_* функционира като работещо решение.
  3. Компилирайте PHP v5.5.9 с предоставени пачове.
  4. Създайте своя собствена PDO обвивка, както е препоръчано от @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. Скрипт за унищожаване на всички връзки към база данни (Повече от RESTRICTED_USER ROLLBACK)

  2. Сравнение на производителността на Sql Server int срещу nvarchar?

  3. Как да получите списък с колони с уникални ограничения в базата данни на SQL Server - SQL Server / TSQL урок, част 98

  4. Какво се случва, ако не извършите транзакция към база данни (да речем, SQL Server)?

  5. Подобрения на брокера на услуги в SQL Server 2016