(PHP 5, PECL OCI8 >= 1.1.0)
oci_new_connect — Connexion au serveur Oracle en utilisant une seule connexion
$username
, string $password
[, string $connection_string
[, string $character_set
[, int $session_mode
]]] )Établit une nouvelle connexion au serveur Oracle et s'identifie.
Contrairement aux fonctions oci_connect() et oci_pconnect(), oci_new_connect() ne met pas en cache les connexions et retourne toujours un gestionnaire de connexion nouvellement ouvert. Ceci est très utile si votre application a besoin d'une isolation transactionnelle entre deux jeux de requêtes.
username
Le nom d'utilisateur Oracle.
password
Le mot de passe pour 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)
ou LOCAL
(sous Windows)
et ORACLE_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]. Avec 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
et
OCI_SYSDBA
.
Si soit la constante OCI_SYSOPER
, soit la constante
OCI_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 drapeau OCI_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 mode
OCI_SYSOPER
ou le mode
OCI_SYSDBA
.
OCI_CRED_EXT
n'est pas supporté sous Windows pour des
raisons de sécurité.
Retourne un identifiant de connexion, ou FALSE
si une erreur survient.
Voici comment séparer des transactions.
Exemple #1 Exemple avec oci_new_connect()
<?php
echo "<html><pre>";
$db = "";
$c1 = oci_connect("scott", "tiger", $db);
$c2 = oci_new_connect("scott", "tiger", $db);
function create_table($conn)
{
$stmt = oci_parse($conn, "create table scott.hallo (test
varchar2(64))");
oci_execute($stmt);
echo $conn . " created table\n\n";
}
function drop_table($conn)
{
$stmt = oci_parse($conn, "drop table scott.hallo");
oci_execute($stmt);
echo $conn . " dropped table\n\n";
}
function insert_data($conn)
{
$stmt = oci_parse($conn, "insert into scott.hallo
values('$conn' || ' ' || to_char(sysdate,'DD-MON-YY HH24:MI:SS'))");
oci_execute($stmt, OCI_DEFAULT);
echo $conn . " inserted hallo\n\n";
}
function delete_data($conn)
{
$stmt = oci_parse($conn, "delete from scott.hallo");
oci_execute($stmt, OCI_DEFAULT);
echo $conn . " deleted hallo\n\n";
}
function commit($conn)
{
oci_commit($conn);
echo $conn . " committed\n\n";
}
function rollback($conn)
{
oci_rollback($conn);
echo $conn . " rollback\n\n";
}
function select_data($conn)
{
$stmt = oci_parse($conn, "select * from scott.hallo");
oci_execute($stmt, OCI_DEFAULT);
echo $conn . "----selecting\n\n";
while (oci_fetch($stmt)) {
echo $conn . " <" . oci_result($stmt, "TEST") . ">\n\n";
}
echo $conn . "----done\n\n";
}
create_table($c1);
insert_data($c1);
select_data($c1);
select_data($c2);
rollback($c1);
select_data($c1);
select_data($c2);
insert_data($c2);
commit($c2);
select_data($c1);
delete_data($c1);
select_data($c1);
select_data($c2);
commit($c1);
select_data($c1);
select_data($c2);
drop_table($c1);
echo "</pre></html>";
?>
Note:
Dans les versions de PHP antérieures à la version 5.0.0, vous devez utiliser la fonction ocinlogon(). 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.