Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

'PDOException' với thông báo 'SQLSTATE [22001]:Chuỗi dữ liệu, bị cắt ngắn bên phải:0

Rất tiếc,

Đó là một PDO_ODBC Sự cố không tương thích 64-bit ( # 61777 , # 64824 ) và không nghi ngờ gì nữa, bạn đang sử dụng phiên bản 64-bit không cho phép bạn ràng buộc các tham số.

May mắn thay,

Nó có một bản vá lần đầu tiên được đưa vào bản phát hành 5.6:

Có vấn đề gì với PDO_ODBC của PHP được vận chuyển ?

Bằng cách xem xét một trong những bản vá được đề xuất đó:

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;

Chúng tôi thấy điều duy nhất được thay đổi là SDWORD (Số nguyên có dấu 16 bit) được thay thế bằng loại ODBC mới SQLULEN đó là 64 bit trong ứng dụng ODBC 64 bit và 32 bit trong ứng dụng ODBC 32 bit .

Tôi tin rằng người cam kết không biết về colsize chỉ kiểu dữ liệu kể từ dòng tiếp theo SQLLEN được định nghĩa đúng.

Tôi nên làm gì bây giờ?

  1. Nâng cấp lên phiên bản PHP> =5.6
  2. Gắn bó với odbc_* hoạt động như một giải pháp hiệu quả.
  3. Biên dịch PHP v5.5.9 với các bản vá được cung cấp.
  4. Tạo trình bao bọc PDO của riêng bạn theo đề xuất của @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. Đặt phần thời gian của một biến datetime

  2. Cách tạo Ràng buộc khóa ngoại bằng BẬT XÓA CASCADE trong SQL Server - Hướng dẫn sử dụng SQL Server / TSQL Phần 80

  3. Cách lấy danh sách các cột có Ràng buộc Duy nhất trong Cơ sở dữ liệu SQL Server - Hướng dẫn SQL Server / TSQL Phần 98

  4. SQL Server - dừng hoặc ngắt việc thực thi tập lệnh SQL

  5. pyodbc - tốc độ chèn hàng loạt rất chậm