【问题标题】:PHP connected to ORACLE, but can't access table rowsPHP 连接到 ORACLE,但无法访问表行
【发布时间】:2017-02-28 07:29:48
【问题描述】:

我已经在 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”中没有行,虽然有行,如果在SQL DEVELOPER中运行SELECT * FROM mytable,返回所有行。

另外,如果有意识地出错,那么 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 的行

【问题讨论】:

  • === 是错字吗? (在错误处理中)
  • @mathguy === 这是php的语法,用于比较
  • 好的,知道了。我不知道。
  • 尝试“从 mytable 中选择 count(*) cnt”。那应该总是返回一行,并且该值会告诉您它是否可以看到表中的任何行。

标签: php oracle oracle12c


【解决方案1】:

尝试像这样将方案名称附加到您的表名称:

$sth = $conn->prepare("SELECT * FROM yourSchemeName.mytable");

【讨论】:

    猜你喜欢
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2018-07-13
    • 2018-03-19
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多