StoredProc
Delphi4PHPにはStoredProcクラスがあります。
一見Delphi(pascal)のコンポーネントと同じように見えるけど、Paramの指定はParamByNameでは出来ません・・・。
プロパティのParams(array型)のところで指定してやるようです。
例
p_test(param1,param2)のようなストアドの場合で、下記のような値を入れたい場合、
param1 : 111
param2 : test
paramsには
---------
111
test
---------
こんな感じで入れておきます(プロパティのところの場合)。
arrayだとどの引き数も同じ種類になるやん! なんでParamByNameが無いねん! ヽ(`Д´)ノ
と怒っていたら、PHPの場合はこれでいいっぽい・・・。
さんざん「型が違う!」と怒られ続けたDel厨の魂100まで・・・。
しかーし
oci8 error: [907: ORA-00907: 右カッコがありません。]
Oracleのストアドの場合、bugる・・・orz
どうやら、InterBase以外のは想定してないぽ(イカス・・・)。
舐めるようにニュースグループを見ていたら、MySQLの場合はdbtables.inc.phpのbuildQueryファンクションを以下のように直せばいいらしい。
//$result="select * from $this->_storedprocname$pars";
上記の部分をコメントアウトしといて、
$result="$this->_storedprocname$pars";
もしくは
$result="EXECUTE $this->_storedprocname$pars";
に変更。
※試してません!
で、Oracleの場合、ソースを必死で解読しつつ色々試してみたのですが以下な感じで動くようになりました。
//$result="select * from $this->_storedprocname$pars";
コメントアウトしといて、その下に以下を付け加える(returnの上)。
//ここから
if ($this->Database->DriverName == "oci8"){
$result= "begin $this->_storedprocname$pars; end;";
$this->_limitstart = -1;
$this->_limitcount = -1;
}
else{
$result="select * from $this->_storedprocname$pars";
}
//ここまで
oci8以外は試してないので、上記の中に入れてません。
そもそもPHP初心者なので、不具合出たらごめんなさい。
| 固定リンク

コメント