2008-09-17 8 views

Répondre

2

Je pense que OCI serait la voie à suivre. PHP a un module pour cela.

2

La couche d'abstraction PDO peut être utilisée pour se connecter à une base de données Oracle et effectuer des actions sur celle-ci. Voici un article sur la façon d'utiliser PDO avec Oracle à partir du site Web Oracle.

Il est également possible d'utiliser OCI.

Le Oracle PHP Development Centre aura beaucoup plus d'informations utiles sur l'utilisation d'Oracle et PHP ensemble.

0

Je ne connais pas le Mac spécifiquement, ni PHP, mais vous devez généralement installer les outils Oracle Client (Client Instantané).

http://www.oracle.com/technology/tech/oci/instantclient/index.html

Une fois installé, vous modifiez le fichier TNSNAMES.ORA pour pointer vers le serveur et le nom d'instance de la base de données Oracle.

Ensuite, vous pouvez utiliser la connexion PHP "database connection" (désolé) pour créer une connexion et exécuter vos instructions SQL.

Utilisez le SQL * PLUS client pour vérifier la connexion fonctionne:

ie.

c:> SQLPLUS 

CONNECT scott/[email protected] 

Si le TNSNAMES.ORA est correct, vous devriez obtenir une connexion, ou au moins « nom d'utilisateur/mot de passe incorrect » que vous avez obtenu prouve la communication avec l'instance Oracle.

Si vous obtenez des erreurs TNS-12521 (?) Alors votre TNSNAMES.ORA est incorrect.

0

La connexion à une base de données Oracle ne devrait poser aucun problème avec l'interface oci, en utilisant par exemple "oci_connect()".

D'autres exemples sont ici: http://php.net/manual/en/oci8.setup.php

Mais je ne comprends pas, ce que la remarque MAC OS X signifie - vous utilisez un apache localement?

Hope this helps, Bastian

+0

Ce serait le système d'exploitation d'Apple 10 (Mac OS X) –

1

Pour instantclient sur osx 10.6 64bit procédez comme suit:

télécharger les librarys client instantanée et sdk, farcir tous dans un dossier. Assurez-vous que vous obtenez la bibliothèque 64 bits si vous êtes sur une machine 64 bits, 32 bits ne fonctionnera pas! - test avec sqlplus premier

créer cette si elle n'existe pas

sudo vi /etc/launchd.conf 

et ajouter à la suite du fichier (avec votre propre chemin!)

setenv DYLD_LIBRARY_PATH /usr/oracle_instantClient64 

Vous devez probaby redémarrer votre système à ce point pour launchd passer le chemin à apache pour ramasser le chemin, ou si le redémarrage des travaux launchd, bien que j'ai un sentiment qui va redémarrer votre système de toute façon !

vous devez ajouter "extension = oci8.so" à php.ini

sudo vi /etc/php.ini 

si ce fichier n'existe pas copie php.ini.default

sudo cp /etc/php.ini.default /etc/php.ini 

puis ajoutez l'extension ci-dessus, il y a une section avec beaucoup d'extensions plus bas dans le fichier, y mettre quelque part

oci nécessite un lien symbolique de la bibliothèque tout comme

sudo ln -s $DYLD_LIBRARY_PATH/libclntsh.dylib.10.1 $DYLD_LIBRARY_PATH/libclntsh.dylib 

Theres également une wierd lien de bibliothèque hardcoded dans les binaires Oracle fixer ainsi que

mkdir -p /b/227/rdbms/ 

Sa recherche que pour les bibliothèques Oracle lien pour revenir

ln -s /usr/oracle_instantClient64/ /b/227/rdbms/lib 

maintenant installer oci8 du référentiel de poire . Si vous avez installé snow léopard osx 10.6 sans mise à niveau, vous pouvez avoir des problèmes avec pear et pecl. Si c'est le cas, vous devrez d'abord installer pear. voir: https://discussions.apple.com/thread/2602597?start=0&tstart=0

sudo pecl install oci8 

TRUC: ne pas utiliser l'identification automatique, indiquez le chemin de instantclient quand il vous demande ..

instantclient,/usr/oracle_instantClient64 

restart apache

sudo apachectl graceful 

test en accédant à l'URL dans un navigateur ou vous pouvez appeler le fichier directement sur la ligne de commande

php index.php 

thats it utiliser ce qui suit comme un fichier test ..

<?php 

$dbHost = "localhostOrDatabaseURL"; 
$dbHostPort="1521"; 
$dbServiceName = "servicename"; 
$usr = "username"; 
$pswd = "password"; 
$dbConnStr = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP) 
      (HOST=".$dbHost.")(PORT=".$dbHostPort.")) 
      (CONNECT_DATA=(SERVICE_NAME=".$dbServiceName.")))"; 


if(!$dbConn = oci_connect($usr,$pswd,$dbConnStr)){ 
$err = oci_error(); 
trigger_error('Could not establish a connection: ' . $err['message'], E_USER_ERROR); 
}; 

$strSQL = "SELECT SYSDATE FROM DUAL"; 

$stmt = oci_parse($dbConn,$strSQL); 
if (! oci_execute($stmt)){ 
$err = oci_error($stmt); 
trigger_error('Query failed: ' . $err['message'], E_USER_ERROR); 
}; 

while(oci_fetch($stmt)){ 
    $rslt = oci_result($stmt, 1); print "<h3>query returned: ".$rslt."</h3>"; 
} 
?> 
Questions connexes