Я установил PHP и ORACLE на Windows 7.
Затем я подключил PHP к ORACLE, используя PDO, вот так:
$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
Попробуйте прикрепить имя схемы к имени таблицы следующим образом:
$sth = $conn->prepare("SELECT * FROM yourSchemeName.mytable");
Других решений пока нет …