Je veux connecter la base de données oracle Schema par défaut qui vient dans l'oracle bd via PDO avec php mais cela me renvoie cette erreur:

Erreur fatale: Uncaught PDOException: SQLSTATE [42S02]: pdo_oci_handle_factory: ORA-12154: TNS: impossible de résoudre l'identifiant de connexion spécifié (ext \ pdo_oci \ oci_driver.c: 640) dans C: \ xampp \ htdocs \ ORACLE \ 52conexion3.php : 9 Trace de pile: # 0 C: \ xampp \ htdocs \ ORACLE \ 52conexion3.php (9): PDO -> __ construct ('oci: host = localh ...', 'hr', 'hr') # 1 { main} jeté dans C: \ xampp \ htdocs \ ORACLE \ 52conexion3.php à la ligne 9

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

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

?>
</body>
</html>

Dans le développeur sql dans la connexion où se trouve le bd de "shema", j'ai fait un clic droit pour voir les propriétés et que les données que j'ai entrées sont correctes, il est dit Nom de la connexion: Schéma - HR , utilisateur: hr , mot de passe: hr , alias du réseau: XE .

Autres tentatives et ne fonctionnent toujours pas:

$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');

J'ai vérifié le fichier .ini et il est apparemment correct "extension = php_pdo_oci.dll".

REMARQUE: j'ai cherché dans le manuel php et quand je ne me connecte pas avec pdo mais à travers la procédure, je le fais de cette manière (en utilisant oci_connect) et cela fonctionne correctement:

$ connection = oci_connect ('hr', 'hr', 'localhost / XE');

// oci_connect: ressource oci_connect (chaîne $ username, chaîne $ password [, chaîne $ connection_string [, string $ character_set [, int $ session_mode]])

5
RicardoBarros 27 nov. 2017 à 00:37

3 réponses

Meilleure réponse

Comme documenté sur la page de manuel PHP, et mentionné dans un commentaire de mario, un DSN PDO pour OCI utilise dbname, et non schema ou host, dans sa définition:

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

Le format localhost/XE que vous utilisez est une chaîne "EZCONNECT". La première partie définit l'hôte (localhost) et la seconde le service (XE).

Vous pouvez également utiliser une chaîne de connexion 'régulière' (comme normalement définie dans un fichier tnsnames.ora) à la place:

$conn_string = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XE)))';
$conn = new PDO('oci:dbname=' . $conn_string, $user, $pass);
3
timclutton 27 nov. 2017 à 12:34

Si vous utilisez localhost et définissez TNS, vous pouvez utiliser uniquement un alias de connexion, dans mon cas orcl:

$conn = new PDO('oci:dbname=orcl', $user, $pass);

À distance, vous pouvez:

$conn = new PDO('oci:dbname=hostname', $user, $pass);
0
gbragamonte 28 janv. 2019 à 22:51

Dans votre dossier php, il y a un fichier php.ini, ouvrez-le dans le bloc-notes et supprimez les extensions avant les déclarations qui ont oci devant, puis redémarrez le serveur, puis exécutez votre code.

Pour la connectivité, vous devez ajouter:

header("Access-Control-Allow-Origin: *");

header("Access-Control-Allow-Headers: Origin, Content-Type");

 $rest_json = file_get_contents("php://input");
 $_POST = json_decode($rest_json,true);

 $opt   = array(PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
                    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
                    PDO::ATTR_EMULATE_PREPARES   => false,
                       );
   // Create a PDO instance (connect to the database)
   $pdo     = new PDO('oci:dbname=127.0.0.1/xe;charset=CL8MSWIN1251', 'username', 'password');
0
WhatsThePoint 22 mars 2018 à 12:52
47501277