問題タブ [oci8]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - Oracle グローバル一時テーブル/PHP の相互作用に関する質問
グローバル一時テーブルを使用したことはありませんが、php 環境でどのように機能するかについていくつか質問があります。
データはどのように共有されますか: oci8 を使用して php を介して oracle に永続的に接続することを前提としています。データはデータベース ID に関連付けられていますか? Apache httpd デーモンに基づいて実行されますか? それとも、個々のリクエストはそれぞれ固有のものですか?
セッションのデータがグローバル一時テーブルから消去されるのはいつですか? 私は、phpスクリプトが終了したときにそれが完了すると想定しています(またはむしろ望んでいます)。そうでない場合は、スクリプトを終了する前に削除する必要があると思います。
php - OCIを使用してPHPで「DESCパッケージ」を返す
こんにちは、OCI8 を使用して PHP から直接 Oracle パッケージに関する情報を取得しようとしています。
これは次を返します:
SQLPlusで試したので、コマンドが機能することはわかっています。
これを達成する方法を知っている人はいますか。
どうも
php - oci_parse の戻り値
クエリによって返された行がない場合、 if 内でコマンドを実行したい if の条件はどうなりますか。
php - Oracle、PHP、および Oci8 を使用した eacute およびその他の特殊文字の処理
こんにちは、名前を Oracle データベースに保存し、PHP と oci8 を使用してそれらを取得しようとしています。
ただし、é
Oracle データベースに直接挿入し、oci8 を使用してそれを取得すると、e
データベースに挿入する前に、すべての特殊文字 ( を含むé
) を html エンティティ (つまり: ) にエンコードする必要がありますか? それとも何か不足していますか?é
どうも
更新: 3 月 1 日 18:40
この関数を見つけました: http://www.php.net/manual/en/function.utf8-decode.php#85034
うまくいくようですが、最適な解決策かどうかはわかりません
更新: 3 月 8 日 15:45
Oracle の文字セットは ISO-8859-1 です。
PHPで追加しました:
oci8 接続でその文字セットを使用するように強制します。é
PHP からの using oci8 の取得が機能するようになりました! (のために、しかしそれを抽出する必要はありませんでした)それでvarchars
、
PHPからOracleにデータを保存しようとしました...そしてそれはうまくいきません..PHPからOracleへの途中のどこかでCLOBs
utf8_encode
é
?
更新: 3 月 9 日 14:47
だから近づいて。NLS_LANG 変数を追加した後、直接 oci8 挿入を行うとé
動作します。
問題は実際には PHP 側にあります。ExtJs フレームワークを使用することで、フォームを送信するときに .xml を使用してエンコードしencodeURIComponent
ます。
Soé
は として送信され%C3%A9
、 に再エンコードされé
ます。
ただし、長さは1 ではなく2 (strlen($my_sent_value) = 2)
になりました。PHP で試してみると、次のようになります。 $my_sent_value == é
= FALSE
これらすべての文字をPHPで再エンコードしてバイトサイズ1の長さに戻し、それらをOracleに挿入できれば、うまくいくはずです。
それでも運が悪い
更新: 3 月 10 日 11:05
私は自分がとても近くにいると思っています(それでも遠く離れています)。
putenv("NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P9");
非常に散発的に動作します。
テストする小さな php スクリプトを作成しました。
これを一度実行して Oracle データベースに直接ログインすると、STRING_FIELD が に設定されていることがわかります|¿|
。明らかに、以前の経験から期待していたものではありませんでした。
ただし、その PHP ページをすばやく 2 回更新すると、うまくいきました !!!
Oracleでは、正しく見ました|é|
。
環境変数が正しく設定されていないか、スクリプトの最初の実行に間に合うように送信されていないようですが、2 回目の実行では使用できます。
私の次の実験は、変数を PHP の環境にエクスポートすることですが、そのためには Apache をリセットする必要があります。
php - oci_connect PHP の空白ページ
更新 (2010 年 5 月 21 日) 成功!
したがって、$head->desk() を何度も実行した後、解決しました。
仮想化の設定に応じて、使用するインスタント クライアントのバージョンに注意してください。
私は一般的な Instant Client をインストールしていました (ESX サーバーが Intel ではなく AMD プロセッサ上にあることに気づいていませんでした)。内部的には問題なく動作していました (内部の ESXi サーバーは 64 ビットではないため、CentOS のインストールは 32 ビットでした)。AMD64 上にある仮想化サーバーで 32 ビットのインストールを実行している場合でも、どのインスタント クライアントをインストールするかは依然として重要です。
最後にチェックしようと思ったのはこれでしたが、現在はすべて正常に動作しています。
これを理解するためにあらゆる可能なテストを実行するのを手伝ってくれたすべての人に感謝したいと思いますが、結局、仮想化の違いに気付かなかったのは私のせいでした.
更新 (2010 年 5 月 21 日) 内部で新しい VM にインストールしたときに、このバグを回避したと思っていましたが、狭まるリンクを見つけました。
これを投稿したとき、これを本番サーバーにインストールしようとしていました。1 週間の進捗がなく、開発に戻る必要があった後、社内サーバーの VM に Crap... CentOS を新しくインストールし、インスタント クライアントと oci8 を新しくインストールしました。
完璧に機能しました。
ただし、VM の正確なコピーを運用サーバーにアップロードしたところ、魔法のように機能しなくなりました。すべてを再インストールしようとしましたが、役に立ちませんでした。
したがって、絞り込むことができる唯一のことは、ファイアウォールの問題 (127.0.0.1 を試したときに同じ問題が発生しますが) またはおそらく ESX (実稼働サーバー) サーバーの問題であり、内部サーバーは ESXi を実行しています。
何かご意見は?
更新 (2010 年 3 月 8 日) Xdebug をインストールして、コードをトレースします。これは私が得ている出力です:
トレースはその時点で停止します。
すべてを同じ方法でローカル サーバーにインストールしましたが、正常に動作します。私が完全に途方に暮れていると言うことは、それを軽く置くことです.
*注: make test を実行したところ、すべてのテストで FAIL が返されました。同じエラーが報告されるかどうかを確認するために、作業中のマシンでこれを実行したことはありません。make test が FAIL を報告するのに、make がエラーを報告しない理由は何ですか?
OCI8 PECL パッケージと一緒にエラーが報告されていない状態で Oracle Instantclient をインストールしましたが、途方にくれました。oci_connect で接続を開こうとすると、PHP スクリプト全体が停止します。
例:
完全な空白ページを返します。モジュールがロードされ (phpinfo に表示されます)、すべてがエラーなしでインストールされます。
私は完全に途方に暮れています。
CentOS: 5.4
アパッチ: 2.2.3
PHP: 5.3.1
インスタントクライアント: 11.2
oci8: 1.4.1
何かご意見は?
ノート
Apache エラーログは何も報告しません
試みられたデバッグ:
1:
戻り値:
2:
ホストを //host に変更する
戻り値:
同じエラー
php - Apache で php5 を実行すると OCI8 関数が見つからない
データベース クラスのプロジェクト用にサーバーをセットアップしようとしています。プロジェクトを php で作成し、apache 経由で展開し、リモートの oracle サーバーに接続します。オラクル接続部分に問題があります。Oracle の InstantClient バージョン 10.2 とともに OCI8 モジュールをインストールしました。コンソールから次のプログラムを実行すると、正しい出力が得られたので、機能していると思いました。
プログラム:
結果:
<table border='1'>
<tr>
<td>1</td>
<td>wrench</td>
<td>silver</td>
</tr>
<tr>
<td>2</td>
<td>hammer</td>
<td>brown</td>
</tr>
</table>
だから私はすべてが大丈夫だと思った。しかし、ブラウザで同じ php ページにアクセスすると、次のエラー メッセージが表示されます。
Fatal error: Call to undefined function oci_connect() in /home/eric/apache2/htdocs/realestate/basicQuery.php on line 2
コマンド ラインと apache で 2 つの異なるバージョンの php が使用されている可能性があると考えたため、phpinfo(); を実行しました。両方のための。しかし、どちらも同じ php 情報 (PHP バージョン 5.2.10-2ubuntu6.4) で戻ってきました。これらは異なる php.ini ファイル (/etc/php5/apache2/php.ini と /etc/php5/cli/php.ini) を使用していますが、どちらもまったく同じです。ある環境と別の環境で異なる可能性があるものを他にどこで探すべきかわかりません。
助けてくれてありがとう!
ruby - Ruby Gemの特定のバージョンを要求するにはどうすればよいですか?
具体的には、ruby-oci8の宝石です。1.0.7と2.0.4の両方をインストールしています。1.0.7が欲しいです。
oci8が必要なだけですが、必要なバージョンが得られません。
ファイルへのフルパスを使用する必要があります。これは機能しますが、移植性はありません。
gemコマンドを使用して必要なバージョンを要求できますが、実際にはライブラリが読み込まれていないようです。
ライブラリがシステムに存在することを確認するだけでなく、ライブラリをロードする場合は、この最後のアプローチを間違いなく支持します。私は何が欠けていますか?
php - PHP/5.3.2 の OCI8 拡張機能はどこにありますか?
OCI8 関数を使用して Oracle 9i サーバーに接続する PHP アプリケーションをデプロイしています。Apache 2.2 モジュール (つまり、VB6+ts MSI インストーラー) として実行するために、Windows 用の最新の公式バイナリ (PHP/5.3.2) をインストールしました。ただし、OCI8 拡張は拡張リストに含まれなくなりました。選択できるオプションはOracle (10)
とだけOracle (11g)
です。
PHP のマニュアルには、OCI8 の非推奨については何も書かれていません。さらに、Oracle 10または11の拡張機能への参照はありません:-?
OCI8の名前は変更されましたか? それらの他の拡張機能は何ですか?
php - 匿名のPL/SQLブロックからPHPに値を返すことはできますか?
PHPとOCI8を使用して、匿名のOracle PL/SQLブロックのコードを実行しています。同様の方法でストアドプロシージャを呼び出すときと同じように、変数をバインドしてブロックの完了時にその出力を取得する方法はありますか?
php - PHP の OCI8/Oracle oci_bind_array_by_name が機能しないのはなぜですか?
PHP変数をpl/sql配列にバインドしようとしています。手動で実行してバインドを設定すると、pl/sql プロシージャは正常に動作するので、それが問題ではないことはわかっています。oci_bind_array_by_name
問題を起こしているのはこいつです。
oci_bind_array_by_name
関数を呼び出す以下の PHP コードの行で、次のエラー メッセージが表示されます。
ドキュメントごとに関数呼び出しで実際に最大長(250)を提供しているため、混乱しています。
http://php.net/manual/en/function.oci-bind-array-by-name.php PHP 5.1.6 を使用しています
関連する PHP コードは次のとおりです。
パッケージで配列型が定義されています。