希望这是一个简单的问题。
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表确实存在且不为空。
任何想法???谢谢你:)。
答案 0 :(得分:9)
通常这有四个可能的问题之一
select * from DB_USER.mantis_bug_table
(如果您不想要限定表名,请参阅Justin Cave关于SYNONYM的答案)您可以通过运行以下
来诊断此问题SELECT * FROM ALL_TABLES WHERE UPPER(table_name) = 'MANTIS_BUG_TABLE'
答案 1 :(得分:3)
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)引用该表而没有完全限定的表名。
答案 2 :(得分:-1)
您应该将方案指向连接字符串,如:
oci_connect('whatmyusrnameis', 'whatmypwdis', 'host/**YOUR_DB**');
查看 connection_string
部分中的http://www.php.net/manual/en/function.oci-connect.php