5

うまくいけば、簡単な質問です。

    error_reporting(E_ALL);
    ini_set('display_errors', '1');
    $c = oci_connect('whatmyusrnameis', 'whatmypwdis', 'host');
    if ($c) {
            echo 'connection';

    }
    $s = oci_parse($c, 'select *  from mantis_bug_table');
    oci_execute($s);

次の結果は

警告oci_execute(): ORA-00942: table or view does not exist

ただし、接続によってエラーが発生することはなく、DBテーブルは存在し、空ではありません。

何か案は???ありがとうございました :)。

4

3 に答える 3

10

通常、これには4つの考えられる問題の1つがあります

  1. 自分が思っているデータベースに接続していません(おそらくそうではありません)
  2. テーブルへのアクセス許可がありません(Grantに関するJustin Caveの回答を参照してください)
  3. テーブル名に所有者を追加する必要がある場合がありますselect * from DB_USER.mantis_bug_table(たとえば、テーブル名を修飾したくない場合は、SYNONYMに関するJustin Caveの回答を参照してください)。
  4. テーブルは実際には存在しませんおそらくスペルミスです

次を実行することでこれを診断できます

SELECT * FROM ALL_TABLES WHERE UPPER(table_name) = 'MANTIS_BUG_TABLE'
于 2011-08-26T15:08:35.703 に答える
3
  • テーブルを所有しているOracleユーザーは何ですか?
  • PHPスクリプトが接続するOracleユーザーは、このテーブルにアクセスできますか?
  • テーブルのパブリックまたはプライベートの同義語はありMANTIS_BUG_TABLEますか?

テーブルが他のユーザーによって所有されている場合は、テーブル名を完全に修飾してみることができます

$s = oci_parse($c, 'select *  from owner_of_table.mantis_bug_table');

PHPスクリプトが使用しているユーザーがテーブルにアクセスできない場合は、DBAまたはテーブルの所有者が次のことを行う必要があります。

GRANT SELECT ON owner_of_table.mantis_bug_table
   TO whatmyusernameis;

テーブルにアクセスでき、テーブル名を完全に修飾することはできますが、毎回テーブル名を完全に修飾する必要がない場合は、シノニムを作成できます。

CREATE [PUBLIC] SYNONYM mantis_bug_table
   FOR owner_of_table.mantis_bug_table

パブリックシノニムを使用すると、テーブルにアクセスできるすべてのユーザーが、完全修飾名を使用せずにテーブルを参照できます。プライベートシノニムを使用すると、シノニムの所有者(つまり、whatmyusernameis)だけが、完全修飾テーブル名なしでテーブルを参照できます。

于 2011-08-26T15:12:11.753 に答える
-1

次のような接続文字列でスキームを指定する必要があります。

oci_connect('whatmyusrnameis', 'whatmypwdis', 'host/**YOUR_DB**');

セクションconnection_stringのhttp://www.php.net/manual/en/function.oci-connect.phpを見てください

于 2011-08-26T15:09:23.907 に答える