我在Windows 7上安装了PHP和ORACLE。
然后我使用PDO将PHP连接到ORACLE,如下所示:
$tns = "(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = oradb)
)
)";
$db_username = "C##OTO_USER";
$db_password = "oto_user_pass";
try{
$conn = new PDO('oci:dbname='.$tns.';charset=UTF8',$db_username,$db_password);
}catch(PDOException $e){
echo ($e->getMessage());
}
连接后,我尝试查询一些表:
$sth = $conn->prepare("SELECT * FROM mytable");
$sth->execute();
if ($sth->errorInfo()[2] === NULL) { // if no error, print returned result
$res = $sth->fetchAll(PDO::FETCH_ASSOC);
var_dump($res);
}
else { // if some error, print error message
echo $sth->errorInfo()[2];
}
奇怪的是,该查询返回空数组,就像“mytable”中没有行一样,尽管有行,如果在SELECT * FROM mytable
中运行SQL DEVELOPER
,则返回所有行。
另外,如果有意识地犯错,那么PHP PDO会返回错误,例如尝试从非现有表“mytable_bla”中选择,给出:
OCIStmtExecute: ORA-00942: table or view does not exist (ext\pdo_oci\oci_statement.c:148)
因此,PDO连接到ORACLE DB,但实际上表中有行时,不会看到表中的行。
可能是由此引起的?
修改
我注意到PDO没有看到新创建的表行,但看到重命名的表行。
例如RENAME mytable TO mytable2
,然后PDO会看到来自mytable2
答案 0 :(得分:0)
尝试将方案名称附加到您的表名称,如下所示:
$sth = $conn->prepare("SELECT * FROM yourSchemeName.mytable");