Zend_Dbの微妙な相違にハマる

今、ZendFrameWorkを使ったphpアプリをDB2からOracle接続へ変える対応をしています。
phpは数年前に少し触った程度でしたが、基本的にアプリケーションスペックは何も変えないという前提なので、DB接続部分を変え、DB2独自のSQL部分を変えればそんなに時間は掛からないだろうと思ってました。

接続部分は、
$conn = Zend_Db::factory(“db2”,$params);

$conn = Zend_Db::factory(“Oracle”,$params);

SQL実行部分は
$stmt = new Zend_Db_Statement_DB2($conn, $sqlString);

$stmt = new Zend_Db_Statement_Oracle($conn, $sqlString);
に、その他DB2独自のSQLをOracle向けにSQLを書き換えていく地味な作業です。。

開発環境は、
pleiades 4.6 Neon PHP にしてみました。
php/pearにZendを追加したり、Oracle接続の為にInstantClient12を入れ、
php.iniは、
extension=php_oci8_12c.dllやextension=php_pdo_oci.dllを有効に、
iconv.internal_encoding=UTF-8 でマルチバイト対応とし、
大体開発環境が整いました。

で、DB2のテーブルをOracleDBに作成し、XAMPPを動かして画面を動かしてみると下記のエラーが、
Invalid bind-variable position ‘?’
バインドがインバリッド?何でだろう??
何もまだ変えてない箇所なんだけど。。

でネットで情報収集していくと下記を発見
oci_bind_by_name
Oracle はクエスチョンマークをプレースホルダとして使いません。

との事。。

まったく変更する必要が無い箇所もたくさんあり、いろいろ継承している既存ソースを考慮し、
?を諦め、下記のように:0などに置き換えていこうと決断。

$sqlString = $sqlString . “? = COLUMN_NAME “;
というような箇所を
$cnt = 0;
$sqlString = $sqlString . “:” . $cnt++ . ” = COLUMN_NAME “;
に変えていきます。

変更箇所は当初想定した倍以上になりそうです。
幸い時間があるので、間に合うとは思いますが、参りました。。