2017-11-26 2 views
3

을 통해 PHP와 오라클 데이터베이스를 연결하지 마십시오 그러나 그것은 나에게이 오류가 발생합니다 :내가 PHP로 PDO를 통해 오라클 BD로 제공 기본적으로 오라클 스키마 데이터베이스를 연결하려는 PDO

Fatal error: Uncaught PDOException: SQLSTATE[42S02]: pdo_oci_handle_factory: ORA-12154: TNS:could not resolve the connect identifier specified (ext\pdo_oci\oci_driver.c:640) in C:\xampp\htdocs\ORACLE\52conexion3.php:9 Stack trace: #0 C:\xampp\htdocs\ORACLE\52conexion3.php(9): PDO->__construct('oci:host=localh...', 'hr', 'hr') #1 {main} thrown in C:\xampp\htdocs\ORACLE\52conexion3.php on line 9

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
</head> 
<body> 
<?php 

    $base = new PDO('oci:host=localhost/XE; dbname= Schema - HR', 'hr','hr'); 

?> 
</body> 
</html> 

에서을 연결에서 SQL 개발자는 어디에 내가 오른쪽 클릭 속성을보고 그 데이터를 입력했는지 "shema"의 bd가 정확하고, 그것은 말합니다 연결 이름 : 스키마 - 인사, 사용자 : 시간, 비밀 번호 : 시간, 네트워크의 별칭 : XE.

다른 시도와 여전히 작동하지 않음 :

$base = new PDO('oci:host=localhost;dbname=Schema - HR', 'hr','hr'); 

$base = new PDO("oci:host=localhost;dbname=Schema - HR", "hr","hr"); 

$base = new PDO("oci:host=localhost/XE;dbname=Schema - HR", "hr","hr"); 

$base = new PDO("oci:host=XE;dbname=Schema - HR", "hr","hr"); 

$base = new PDO('oci:host=localhost;dbname="Schema - HR"', 'hr','hr'); 

나는 .ini 파일을 확인하고 그것을 분명히 바로 "확장자 = php_pdo_oci.dll"입니다. '(

$ 연결 = oci_connect을 : 참고

: 나는 PHP 매뉴얼을 검색하고 난 PDO와 연결되지 않는 경우 만 과정을 통해 나는 (oci_connect 사용)이 방법으로 그것을 할 그것은 제대로 작동 hr ','hr ','localhost/XE ');

// oci_connect : 자원 oci_connect (문자열 $ 이름, 문자열 $ 암호 [문자열 $ connection_string [문자열 $ character_set에 [INT $ session_mode]])

+2

- 데이타베이스 이름에 공백을 좋아하지 않는다. –

+2

공백없이 "prueba"라는 이름으로 다른 데이터베이스를 시도했지만 작동하지 않습니다 :/ – RicardoBarros

+1

"localhost/XE"구문은 무엇입니까? host는 호스트의 이름이어야하며 (DNS) 해석 가능한 이름 슬래시를 포함해서는 안된다 –

답변

1
PHP manual page에 기록으로

mentioned in a comment by mario하는 OCI에 대한 PDO DSN은 정의, dbname하지 schema 또는 host를 사용하여 사용중인

$conn = new PDO('oci:dbname=localhost/XE', $user, $pass); 

localhost/XE 형식은 'EZCONNECT'문자열입니다. 첫 번째 부분은 호스트 (localhost)를 정의하고 두 번째 부분은 서비스 (XE)를 정의합니다. 대신

(일반적으로 tnsnames.ora 파일에 정의 된대로) 당신은 또한 '일반'연결 문자열을 사용할 수 있습니다 추측으로

$conn_string = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XE)))'; 
$conn = new PDO('oci:dbname=' . $conn_string, $user, $pass); 
+0

oracle과 mysql 모두 동일하지만 PDO 튜토리얼을보고있었습니다 (하지만 phpmyadmin과 함께 mysql bd를 사용했다.) 그리고 4 개의 필드를 넣었다. 분명히 그들은 다르다 오라클과 함께 3 필드가 필요합니다 :) 그것이 맞습니까? 이제는 저에게 효과적이지만 의심의 여지를 남기고 싶습니다. 참고 : 퍼팅을 시도했습니다. $ conn = new PDO ('oci : dbname = localhost', $ user, $ pass); XE가 없으면 제대로 작동합니다. 이유가 무엇입니까? 미리 감사드립니다 – RicardoBarros

+0

[documentation] (https://docs.oracle.com/cd/E18283_01/network.112/e10836/naming.htm)에는 'host'를 제외한 연결 문자열의 모든 부분이 선택적으로 표시됩니다. 인용구 : _ 사용자가 서비스 이름을 지정한 경우 리스너는 사용자를 해당 특정 데이터베이스에 연결합니다. 그렇지 않으면, 리스너는'listener.ora' 파일의'DEFAULT_SERVICE_listener_name' 매개 변수에 지정된 데이터베이스에 연결합니다. – timclutton