残念ながら
PDO_ODBC
です 64ビットの非互換性の問題(#61777
、#64824
)そして間違いなく、パラメータをバインドできない64ビットビルドを使用しています。
幸いなことに
パッチがあります これは5.6リリースに最初に含まれていました:
PHPに付属のPDO_ODBC
の何が問題になっていますか ?
それらの推奨パッチの1つを見て:
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ビットODBCアプリケーションでは64ビット、32ビットODBCアプリケーションでは32ビットです。
。
コミッターはcolsize
を認識していなかったと思います 次の行にあるSQLLEN
以降のデータ型のみ 正しく定義されています。
今何をすればいいですか?
- PHPバージョンへのアップグレード>=5.6
-
odbc_*
に固執する 実用的なソリューションとして機能します。 - 提供されているパッチを使用してPHPv5.5.9をコンパイルします。
- @GordonMの推奨に従って、独自のPDOラッパーを作成します