Bonjour,

Je suis débutant et je vous écris afin que vous puissiez m'aider sur mon application Web avec CakePHP.

J'essaye vraiment de faire une requête simple afin de vérifier si ma connexion avec ma base de données Oracle fonctionne.
Environnement de travail :

  • Je suis connecté à une VM à distance configuré sous Microsoft Server 2012.
  • J'utilise pour héberger mon application un serveur d'hébergement IIS.
  • Les IHM sont bien en ligne mais je n'arrive pas à vérifier ma connexion à ma BDD Oracle.

Après avoir suivi plusieurs tutoriels et axes de connexion, comme les liens odbc ou oci_connect, je vais vous montre ce que j'ai pour l'instant et peut-être vous pourriez me préconiser une solution en particulier :

Dans /app/Config/database.php :

<?php
class DATABASE_CONFIG {
    public $default = array(
        'datasource' => 'Database/Oracle',
        'driver' => 'oracle',
        'connect' => 'oci_pconnect',
        'persistent' => false,
        'host' => ' *****',
        'login' => ' *****',
        'password' => ' *****',
        'database' => ' ***** :1521/TESTCUST10',
        'prefix' => '',
        'schema' => 'SYSTEM',
        //'encoding' => 'UTF8'
    );
}

J'ai tiré les différentes informations de mon tnsnames.ora et j'ai au préalable configuré les éléments dans \lib\Cake\Model\Datasource et lib\Cake\Model\Datasource\Database pour une connexion Oracle.
Je peux également utilisé 'driver' => 'odbc' pour effectuer ma connexion, je ne sais pas ce qui est le mieux. Grâce au lien que j'ai configuré via le logiciel de Microsoft.

Dans mon Controller, je voulais essayer une ligne basique, peut-être que je me trompe dans la syntaxe déjà ?

<?php
App::uses('AppController', 'Controller');
    class TicketsController extends AppController{
            public function index() {
        $data'customer'] = $this->Tickets->query("SELECT name from customer where customer_id = '1996';");
        debug($data);
        }
    }

Faut-il rajouter quelque chose dans le MODEL ? si, oui je dois le nommer Tickets.php ?

<?php
App::uses('AppModel', 'Model');
class Tickets extends AppModel {
        public $displayField = 'name';
            public $useDbConfig = 'default';
        }
}

L'erreur qui est inscrit sur le navigateur : Call to a member function query() on a non-object.

Merci par avance. Je me tiens à votre disposition à tout moment.

5 réponses


Ch0c4
Réponse acceptée

Salut,

ton model est faux, tu dois créer le fichier Ticket.php (sans s) ainsi que le nom de ta classe http://book.cakephp.org/2.0/fr/getting-started/cakephp-conventions.html#conventions-pour-les-models-et-les-sources-de-donnees
, tu as une accolade de trop dans ton model et dans ton controller tu dois appeler $this->Ticket->query(....);

Zephyris
Auteur

Merci, j'ai fais les changements que tu viens de m'indiquer :
Résultats sur la page :
array(
'customer' => false
)

Qu'est-ce que cela signifie stp ? Mon $data'customer'] ne correspond pas à ma BDD ?

Cela signifie que ta requête

$this->Tickets->query("SELECT name from customer where customer_id = '1996';");

retourne false.

Zephyris
Auteur

Désolé de t'embêter,

A la place de :

debug($data);

J'ai mis :

$data'customer'] = $this->GfiTicket->query("SELECT name from customer where customer_id = '1996';");
$this->set($data);

Car je suis sûr que ma requête est bonne étant que je l'ai testé sous Oracle Sql Developer donc ça doit venir d'autre part

Erreur :
Use of undefined constant customer - assumed 'customer'

L'erreur me dit que tu utilises une constante 'customer' dans ton code qui n'est pas défini, je pense que ça a rien a voir avec ta requête