Надеюсь, простой вопрос.
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
Но соединение не приводит к ошибкам, и таблица БД существует, и она не пуста.
Любые идеи??? Спасибо :).
3 ответа
Обычно это одна из четырех возможных проблем.
- Вы не подключаетесь к базе данных, о которой думаете (вероятно, это не так)
- У вас нет разрешения на стол (см. Ответ Джастина Кейва относительно Гранта)
- Возможно, вам потребуется добавить владельца к имени таблицы, например.
select * from DB_USER.mantis_bug_table
(см. Ответ Джастина Кейва относительно SYNONYM, если вы не хотите уточнять имя таблицы) - Таблица действительно не существует, возможно, орфографическая ошибка
Вы можете диагностировать это, выполнив следующие
SELECT * FROM ALL_TABLES WHERE UPPER(table_name) = 'MANTIS_BUG_TABLE'
- Какой пользователь 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) ссылаться на таблицу без полного имени таблицы.
Вы должны указать схему в строке подключения, например:
oci_connect('whatmyusrnameis', 'whatmypwdis', 'host/**YOUR_DB**');
Посмотрите на http://www.php.net/manual/en/function .oci-connect.php в разделе connection_string .
Похожие вопросы
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.