Надеюсь, простой вопрос.

    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

Но соединение не приводит к ошибкам, и таблица БД существует, и она не пуста.

Любые идеи??? Спасибо :).

5
ale 26 Авг 2011 в 19:03

3 ответа

Лучший ответ

Обычно это одна из четырех возможных проблем.

  1. Вы не подключаетесь к базе данных, о которой думаете (вероятно, это не так)
  2. У вас нет разрешения на стол (см. Ответ Джастина Кейва относительно Гранта)
  3. Возможно, вам потребуется добавить владельца к имени таблицы, например. select * from DB_USER.mantis_bug_table (см. Ответ Джастина Кейва относительно SYNONYM, если вы не хотите уточнять имя таблицы)
  4. Таблица действительно не существует, возможно, орфографическая ошибка

Вы можете диагностировать это, выполнив следующие

SELECT * FROM ALL_TABLES WHERE UPPER(table_name) = 'MANTIS_BUG_TABLE'
10
Conrad Frix 26 Авг 2011 в 18:09
  • Какой пользователь Oracle владеет таблицей?
  • Имеет ли пользователь Oracle, к которому подключается ваш PHP-скрипт, доступ к этой таблице?
  • Есть ли общий или частный синоним для таблицы MANTIS_BUG_TABLE?

Если таблица принадлежит другому пользователю, вы можете попробовать полностью указать имя таблицы.

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

Если пользователь, который использует ваш PHP-скрипт, не имеет доступа к таблице, вам понадобится администратор баз данных или владелец таблицы, чтобы

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) ссылаться на таблицу без полного имени таблицы.

3
Justin Cave 26 Авг 2011 в 15:12

Вы должны указать схему в строке подключения, например:

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

Посмотрите на http://www.php.net/manual/en/function .oci-connect.php в разделе connection_string .

-1
Andrej Ludinovskov 26 Авг 2011 в 15:09