2日間格闘した後、ここで助けを求めてみます。CentOS 5.4 サーバーで DB2 (iSeries) および PHP (5.3) を操作するために unixODBC (2.2.11) を使用しています。PHP を 5.1 から 5.3 にアップグレードしてからだと思いますが、特定のクエリで PHP が segfault するようになりました。いくつかの調査の後、次のテーブルなど、長い文字フィールドを持つ一部のクエリで問題が発生することを発見しました。
TABLE (
CONTRACTID NUMERIC,
SOMETEXT CHAR(583)
)
この単純なコードは、segfault を引き起こします。
try {
$conn = new PDO("odbc:".$dsn, $username, $password, array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
);
}
catch (Exception $e) {
echo $e->getMessage();
}
$sql = 'SELECT * FROM LIB.TABLE ';
$stmt = $conn->prepare($sql);
$vals = $stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
unixODBC および/または PHP >= 5.1 の列の長さの制限またはバグはありますか? このWebアプリケーションは非常にうまく機能しましたが、この問題に遭遇しました..
ところで、unixODBC 2.2.14 と PHP 5.3 を搭載した最新の 64 ビット CentOS 6.2 マシンでテストしましたが、問題は同じです。
どんな助けでも大歓迎です、
ありがとう
ファビアン
更新: PHP odbc 関数を使用すると、動作します:
$conn = odbc_connect($dsn, $username, $password);
$res = odbc_exec($conn, $sql);
$rows = odbc_fetch_array($res);
したがって、問題は PDO に関連しています。何か考えはありますか?