oci_connect
(PHP 5, PECL OCI8 >= 1.1.0)
oci_connect — Établit une connexion avec un serveur Oracle
Description
$username
, string $password
[, string $connection_string
[, string $character_set
[, int $session_mode
]]] )Retourne un identifiant de connexion, nécessaire à la plupart des appels OCI8.
Voir la section sur la gestion des connexions pour des informations générales sur la façon dont sont gérées les connexions avec un serveur Oracle.
Depuis PHP 5.1.2 (PECL OCI8 1.1), la fonction oci_close() peut être utilisée pour fermer une connexion.
Les appels suivants (suivant un premier) à la fonction oci_connect() avec les mêmes paramètres retourneront le gestionnaire de connexion retourné lors du premier appel. Cela signifie que les transactions effectuées sur un gestionnaire seront actives sur les autres, sachant qu'elles utilisent la même connexion sous-jacente. Si 2 gestionnaires doivent avoir des transactions isolées, utilisez à la place la fonction oci_new_connect().
Liste de paramètres
-
username
-
Le nom d'utilisateur Oracle.
-
password
-
Le mot de passe de l'utilisateur.
-
connection_string
-
Contient l'instance Oracle sur laquelle nous devons nous connecter. Ce peut être une » chaîne de connexion rapide, un nom de connexion issue du fichier tnsnames.ora, ou le nom d'une instance locale Oracle.
Si non spécifié, PHP utilise des variables d'environnement comme
TWO_TASK
(sous Linux) ouLOCAL
(sous Windows) etORACLE_SID
pour déterminer l'instance Oracle sur laquelle nous devons nous connecter.Pour utiliser la méthode de connexion rapide, PHP doit être lié avec la bibliothèque cliente Oracle 10g ou supérieur. La chaîne de connexion rapide pour Oracle 10g ou supérieur est de la forme : [//]host_name[:port][/service_name]. Depuis Oracle 11g, la syntaxe est : [//]host_name[:port][/service_name][:server_type][/instance_name]. Les noms des services peuvent être trouvés en exécutant l'utilitaire Oracle lsnrctl status sur la machine exécutant la base de données.
Le fichier tnsnames.ora peut être dans le chemin de recherche d'Oracle Net, qui inclut $ORACLE_HOME/network/admin et /etc. Une solution alternative serait de définit TNS_ADMIN afin que le fichier $TNS_ADMIN/tnsnames.ora soit lu. Assurez-vous que le daemon exécutant le serveur web a accès en lecture à ce fichier.
-
character_set
-
Détermine le jeu de caractères utilisé par la bibliothèque cliente Oracle. Le jeu de caractères n'a pas besoin d'être identique à celui utilisé par la base de données. S'il ne correspond pas, Oracle ferait de son mieux pour convertir les données depuis le jeu de caractères de la base de données. Suivant les jeux de caractères, il se peut que le résultat ne soit pas parfait. De plus, cette conversion nécessite un peu de temps système.
Si non spécifié, la bibliothèque cliente Oracle déterminera un jeu de caractères depuis la variable d'environnement
NLS_LANG
.Le fait de passer ce paramètre peut réduire la durée de connexion.
-
session_mode
-
Ce paramètre est disponible depuis PHP 5 (PECL OCI8 1.1) et accepte les valeurs suivantes :
OCI_DEFAULT
,OCI_SYSOPER
etOCI_SYSDBA
. Si soit la constanteOCI_SYSOPER
, soit la constanteOCI_SYSDBA
est spécifiée, cette fonction tentera d'établir une connexion privilégiée en utilisant des identifiants externes. Les connexions privilégiées sont désactivées par défault. Pour les activer, vous devez définir l'option oci8.privileged_connect à On.PHP 5.3 (PECL OCI8 1.3.4) introduisent la valeur de mode
OCI_CRED_EXT
. Ce mode demande à Oracle d'utiliser une identification externe ou bien issue du système d'exploitation, qui doit être configurée dans la base de données. Le drapeauOCI_CRED_EXT
ne peut être utilisé qu'avec le nom d'utilisateur "/" associé à un mot de passe vide. L'option oci8.privileged_connect peut être définie à On ou Off.OCI_CRED_EXT
peut être combiné avec le modeOCI_SYSOPER
ou le modeOCI_SYSDBA
.OCI_CRED_EXT
n'est pas supporté sous Windows pour des raisons de sécurité.
Valeurs de retour
Retourne un identifiant de connexion ou FALSE
si une erreur survient.
Exemples
Exemple #1 Exemple avec oci_connect() en utilisant la syntaxe simplifiée
<?php // Connexion au service XE (i.e. la base de données) sur la machine "localhost" $conn = oci_connect('hr', 'welcome', 'localhost/XE'); if (!$conn) { $e = oci_error(); trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); } $stid = oci_parse($conn, 'SELECT * FROM employees'); oci_execute($stid); echo "<table border='1'>\n"; while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) { echo "<tr>\n"; foreach ($row as $item) { echo " <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "") . "</td>\n"; } echo "</tr>\n"; } echo "</table>\n"; ?>
Exemple #2 Exemple avec oci_connect() en utilisant un nom de connexion réseau
<?php // Connexion à la base de données MYDB décrite dans le fichier tnsnames.ora, // Un exemple d'entrée tnsnames.ora pour MYDB pourraît être : // MYDB = // (DESCRIPTION = // (ADDRESS = (PROTOCOL = TCP)(HOST = mymachine.oracle.com)(PORT = 1521)) // (CONNECT_DATA = // (SERVER = DEDICATED) // (SERVICE_NAME = XE) // ) // ) $conn = oci_connect('hr', 'welcome', 'MYDB'); if (!$conn) { $e = oci_error(); trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); } $stid = oci_parse($conn, 'SELECT * FROM employees'); oci_execute($stid); echo "<table border='1'>\n"; while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) { echo "<tr>\n"; foreach ($row as $item) { echo " <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "") . "</td>\n"; } echo "</tr>\n"; } echo "</table>\n"; ?>
Exemple #3 Exemple avec oci_connect() en utilisant un jeu de caractère spécifique
<?php $conn = oci_connect('hr', 'welcome', 'localhost/XE', 'AL32UTF8'); if (!$conn) { $e = oci_error(); trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); } $stid = oci_parse($conn, 'SELECT * FROM employees'); oci_execute($stid); echo "<table border='1'>\n"; while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) { echo "<tr>\n"; foreach ($row as $item) { echo " <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "") . "</td>\n"; } echo "</tr>\n"; } echo "</table>\n"; ?>
Exemple #4 Exemple avec plusieurs appels à la fonction oci_connect()
<?php
$c1 = oci_connect("hr", "welcome", 'localhost/XE');
$c2 = oci_connect("hr", "welcome", 'localhost/XE');
// À la fois $c1 et $c2 affichent le même identifiant de ressources PHP, ce qui signifie
// qu'il s'agit de la même connexion à la base de données
echo "c1 is $c1<br>\n";
echo "c2 is $c2<br>\n";
function create_table($conn)
{
$stmt = oci_parse($conn, "create table hallo (test varchar2(64))");
oci_execute($stmt);
echo "Created table<br>\n";
}
function drop_table($conn)
{
$stmt = oci_parse($conn, "drop table hallo");
oci_execute($stmt);
echo "Dropped table<br>\n";
}
function insert_data($connname, $conn)
{
$stmt = oci_parse($conn, "insert into hallo
values(to_char(sysdate,'DD-MON-YY HH24:MI:SS'))");
oci_execute($stmt, OCI_DEFAULT);
echo "$connname inserted row without committing<br>\n";
}
function rollback($connname, $conn)
{
oci_rollback($conn);
echo "$connname rollback<br>\n";
}
function select_data($connname, $conn)
{
$stmt = oci_parse($conn, "select * from hallo");
oci_execute($stmt, OCI_DEFAULT);
echo "$connname ----selecting<br>\n";
while (oci_fetch($stmt)) {
echo " " . oci_result($stmt, "TEST") . "<br>\n";
}
echo "$connname ----done<br>\n";
}
create_table($c1);
insert_data('c1', $c1); // Insère une ligne en utilisant c1
sleep(2); // On attend afin de voir un timestamp différent pour la seconde ligne
insert_data('c2', $c2); // Insère une ligne en utilisant c2
select_data('c1', $c1); // Les résultats des 2 insertions sont retournés
select_data('c2', $c2); // Les résultats des 2 insertions sont retournés
rollback('c1', $c1); // Annulation de la transaction en utilisant c1
select_data('c1', $c1); // Les 2 insertions ont été annulées
select_data('c2', $c2);
drop_table($c1);
// La fermeture d'une connexion rend les variables PHP indisponibles, mais les autres
// peuvent être toujours utilisées
oci_close($c1);
echo "c1 is $c1<br>\n";
echo "c2 is $c2<br>\n";
// Affichage :
// c1 is Resource id #5
// c2 is Resource id #5
// Created table
// c1 inserted row without committing
// c2 inserted row without committing
// c1 ----selecting
// 09-DEC-09 12:14:43
// 09-DEC-09 12:14:45
// c1 ----done
// c2 ----selecting
// 09-DEC-09 12:14:43
// 09-DEC-09 12:14:45
// c2 ----done
// c1 rollback
// c1 ----selecting
// c1 ----done
// c2 ----selecting
// c2 ----done
// Dropped table
// c1 is
// c2 is Resource id #5
?>
Notes
Note:
Si un problème est survenu lors de l'installation de l'extension OCI8, une des manifestations sera un problème lors de la connexion. Reportez-vous à la section Installation/Configuration pour plus d'informations en cas d'erreurs.
Note:
Dans les versions de PHP avant 5.0.0, utilisez la fonction ocilogon() à la place. Le nom de l'ancienne fonction peut toujours être utilisé dans les versions courantes, malgré le fait qu'il est maintenant obsolète et que nous ne vous le recommandons pas.
Voir aussi
- oci_pconnect() - Ouvre une connexion persistante à un serveur Oracle
- oci_new_connect() - Connexion au serveur Oracle en utilisant une seule connexion
- oci_close() - Ferme une connexion Oracle