problème requête SQL dans une fonction PHP

Discussion dans 'Administration d'un site Web' créé par roblescriso, 31 Mai 2005.

  1. roblescriso
    roblescriso Nouveau WRInaute
    Inscrit:
    20 Avril 2005
    Messages:
    31
    J'aime reçus:
    0
    bonjour à tous et merci d'avance pour votre aide! :D

    j'ai une base de données oracle et pour faire un INSERT dans la base je recupere le ID depuis une class qui s'appelle magic mais j'ai un erreur : Fatal error: Call to a member function dbquery() on a non-object quand j'essaye d'inserer de données..

    voici un bout de mon code:

    appelle de la fonction:
    $magic= new magic($database);
    $database = new database();
    $database->dbquery( "INSERT INTO AS_PRODUIT( DATE_CREATION,USER_CREATION,ELEMENT_CREATION,STATUS,DB_ELEMENT_ID,ID,AS_TYPROD_CI,AS_FAMILLE_ID,REFERENCE_INT_1)
    VALUES('$DATE_CREATION','$USER_CREATION','$ELEMENT_CREATION','$STATUS','$DB_ELEMENT_ID'," . $magic->getid("AS_PRODUIT") . ",'$AS_TYPROD_CI','$AS_FAMILLE_ID','$NArt')");
    $database->dbclose();

    et voici la classe:

    class magic{
    var $database;
    function magic($database)
    {
    $this->database=$database;
    }
    function getid($table_name)
    {
    $lastid = $this->database->dbquery("SELECT dernier_numero FROM db_sequence WHERE nom_table='$table_name'");
    $lastid = $lastid[0][0];
    $lastid++;

    $this->database->dbquery("UPDATE db_sequence SET dernier_numero='$lastid' WHERE nom_table='$table_name'");
    return($lastid); // Renvoi le dernier ID disponible pour la table
    }
    };

    et pour finir la classe database:

    class database{
    function database($ora_user='xxxx', $ora_password='xxxxx',$ora_connect_string='xxxxx')
    {
    $this->debug=false;
    $this->dbconnect($ora_user, $ora_password, $ora_connect_string);
    }
    function dbconnect($ora_user, $ora_password, $ora_connect_string) // Fonction de connexion à une base de donnée Oracle
    {
    $this->conn=OCILogon($ora_user, $ora_password, $ora_connect_string);
    }
    function show_errormsg($query=null)
    {
    if($this->debug)die(OCIError($this->conn) . "SQL QUERY: $query");
    else die();
    }

    function dbquery($query) // Exécution de la requête SQL
    {
    // Execute une requête SQL puis retourne un tableau avec le résultat (s'il y a lieu)

    $i=0;

    if(!($this->stmt=OCIParse($this->conn,$query))) // Vérification de la syntaxe (Si fausse, afficher l'erreur Oracle)
    $this->show_errormsg($query);
    if(sizeof($this->blobsbind)>0) // Si il y'a des liaison de variables à faire, créer les liaisons
    do
    {
    $lobs[$i] = OCINewDescriptor($this->conn, OCI_D_LOB);
    $mixedvar = &$lobs[$i];
    OCIBindByName($this->stmt, ":" . $this->blobsbind[$i][0], $mixedvar, -1, OCI_B_BLOB);
    $i++;
    }
    while(next($this->blobsbind));

    if (!OCIExecute($this->stmt,OCI_DEFAULT))
    $this->show_errormsg($query);

    if (strtoupper(substr($query, 0, 6))=="SELECT")
    {
    // Récupération des données et de ces données dans une Array
    $this->numcolumns = ocinumcols($this->stmt);

    $this->numrows=0;

    while(OCIFetchInto($this->stmt, $row, OCI_ASSOC))
    {
    for($column=1;$column<=$this->numcolumns;$column++)
    if(ocicolumntyperaw($this->stmt, $column)==_BLOB_RAWTYPEID)
    $result[$this->numrows][$column-1]=$row[ocicolumnname($this->stmt, $column)]->load();
    else
    $result[$this->numrows][$column-1]=$row[ocicolumnname($this->stmt, $column)];

    $this->numrows++;
    };
    return($result);
    }
    else
    {
    // ECRITURE, MISE A JOUR, EFFACEMENT
    $i=0;
    if(sizeof($this->blobsbind)>0)
    do
    {
    if(!$lobs[$i]->save($this->blobsbind[$i][1]))
    $this->show_errormsg($query);
    $i++;
    }
    while(next($this->blobsbind));
    }

    OCICommit($this->conn);
    OCIFreeStatement($this->stmt);
    }
    function dbclose()
    {
    // Fermeture de la connexion oracle
    OCILogoff($this->conn);
    }

    };

    dsl je sais que c'est beaucoup de code mais j'arrive pas à trouver l'erreur :cry:
     
  2. narayana
    narayana WRInaute impliqué
    Inscrit:
    28 Janvier 2005
    Messages:
    727
    J'aime reçus:
    0
    euh ce ne serait pas mieux de poster ce genre de message sur un site qui traite d'Oracle ?
     
  3. pedouille
    pedouille WRInaute discret
    Inscrit:
    24 Mai 2005
    Messages:
    80
    J'aime reçus:
    0
    Tu n'as pas de constructeur dans tes classes. Je pense que le problème vient de là. Ou alors tu ne nous a pas mis les constructeurs ?

    Si c'est le cas, est-ce que tes classes sont dans des fichiers séparés de ton bout de code ?

    Si oui, as-tu bien mis :
    require('fichier_de_magic.php')
    require('fichier_de_database.php'); ?

    sinon, rajoute les en haut de ton fichier.

    Le problème est que pour php, database n'est pas un objet, ça veut dire qu'il ne peut pas l'initialiser.

    EDIT : j'ai dit une connerie pour les constructeurs, je cherchais une fonction __construct(). désolé :oops:
     
  4. medium69
    medium69 WRInaute passionné
    Inscrit:
    7 Mai 2005
    Messages:
    1 940
    J'aime reçus:
    3
    ... Google c'est pas notre oracle à tous :?:

    Je sais, je sais... j'ai l'habitude :arrow:
     
  5. roblescriso
    roblescriso Nouveau WRInaute
    Inscrit:
    20 Avril 2005
    Messages:
    31
    J'aime reçus:
    0
    mes fonctions sont dans un fichier qui s'appelle fonctions.php :)
    et je l'appelle dans ma page ou je fais l'appelle de fonction:
    require 'fonctions.php';
    et dans ma page fonctions j'appelle aussi le fichier avec les variables de conneccion:
    include ($DOCUMENT_ROOT . "/shop/admin/webdata/database/shopadmin_connexion.ini");
     
  6. pedouille
    pedouille WRInaute discret
    Inscrit:
    24 Mai 2005
    Messages:
    80
    J'aime reçus:
    0
    Et tu as des constructeurs pour tes classes ?

    Pourrait tu mettre le code entier pour une des classes
     
  7. roblescriso
    roblescriso Nouveau WRInaute
    Inscrit:
    20 Avril 2005
    Messages:
    31
    J'aime reçus:
    0
    voilà le code d'une de mes classes:

    // Pour initialiser cette classe il faut passer au constructeur un pointeur sur un objet database connecté
    class magic{
    var $database;
    function magic($database)
    {
    $this->database=$database;
    }
    function getid($table_name)
    {
    $lastid = $this->database->dbquery("SELECT dernier_numero FROM db_sequence WHERE nom_table='$table_name'");
    $lastid = $lastid[0][0];
    $lastid++;

    $this->database->dbquery("UPDATE db_sequence SET dernier_numero='$lastid' WHERE nom_table='$table_name'");
    return($lastid); // Renvoi le dernier ID disponible pour la table
    }
    };
     
  8. pedouille
    pedouille WRInaute discret
    Inscrit:
    24 Mai 2005
    Messages:
    80
    J'aime reçus:
    0
    Je pense que le problème vient du fait que tu déclare $magic avant $database.

    En faisant ça, au moment de l'instanciation de $magic, php créé une nouvelle variable vierge $database (puisque tu l'utilise et qu'elle n'est pas déclarée).

    Du fait que cette variable soit vierge, lorsque dans magic->getid(), tu appelle $database->dbquery(), php répond que cette variable n'est pas un objet, d'où le message d'erreur.

    Pour résoudre le problème, inverse la déclaration de $magic et $database, et je pense que ça sera bon ...

    :wink:
     
  9. cedber
    cedber WRInaute discret
    Inscrit:
    19 Mai 2005
    Messages:
    194
    J'aime reçus:
    0
    Juste pour tester essaye de modifier le nom ed tes variables :

    $magic= new magic($database);
    $database = new database();
    $database->dbquery( "INSERT INTO AS_PRODUIT( DATE_CREATION,USER_CREATION,ELEMENT_CREATION,STATUS,DB_ELEMENT_ID,ID,AS_TYPROD_CI,AS_FAMILLE_ID,REFERENCE_INT_1)
    VALUES('$DATE_CREATION','$USER_CREATION','$ELEMENT_CREATION','$STATUS','$DB_ELEMENT_ID'," . $magic->getid("AS_PRODUIT") . ",'$AS_TYPROD_CI','$AS_FAMILLE_ID','$NArt')");
    $database->dbclose();

    Je trouve pas ca terrible quand il s'agit du meme nom de variable que celles de ta classe...
    C'est juste une idée
     
  10. roblescriso
    roblescriso Nouveau WRInaute
    Inscrit:
    20 Avril 2005
    Messages:
    31
    J'aime reçus:
    0
    ok! :D
    alors j'ai inversé :

    $database = new database();
    $magic= new magic($database);

    et mnt ça marche!

    merci à tous pour votre aide!

    bonne journée!
     
Chargement...
Similar Threads - problème requête SQL Forum Date
Problème requête mysql Développement d'un site Web ou d'une appli mobile 1 Mars 2017
Problème de jointure entre deux tables requête SQL Développement d'un site Web ou d'une appli mobile 11 Avril 2011
problème requête sql (1&1) Administration d'un site Web 28 Septembre 2009
Problème requête sql Développement d'un site Web ou d'une appli mobile 26 Septembre 2009
Requete Mysql probleme doublons Développement d'un site Web ou d'une appli mobile 8 Avril 2008
problème requête mysql Développement d'un site Web ou d'une appli mobile 13 Mars 2008
Problème de requête SQL Développement d'un site Web ou d'une appli mobile 19 Janvier 2008
problème sur une requête mysql Développement d'un site Web ou d'une appli mobile 5 Octobre 2007
Problème avec clause DISTINCT dans requête SQL Développement d'un site Web ou d'une appli mobile 22 Avril 2007
problème de requête SQL : elle me retourne tous les tuples Administration d'un site Web 12 Février 2007
MySQL : probleme de requete Développement d'un site Web ou d'une appli mobile 27 Septembre 2006
Problème requête SQL (ter) Administration d'un site Web 16 Juin 2006
Problème avec requête SQL multiple (3 tables) et comptage Développement d'un site Web ou d'une appli mobile 22 Février 2006
MySQL problème de requete LEFT JOIN Administration d'un site Web 13 Avril 2005
Problème requête SQL Administration d'un site Web 18 Mars 2005
probleme de requete mysql Administration d'un site Web 7 Septembre 2004
Problème requete SQL avec ASP. Administration d'un site Web 30 Juin 2004
Problème de ranking sur une requête cible Demandes d'avis et de conseils sur vos sites 24 Août 2021
Problème pour passer un tableau en paramètre d'une requêtet SELECT. Développement d'un site Web ou d'une appli mobile 24 Mars 2017
Problème PDO pour afficher le contenu d'une requête située dans un autre fichier Développement d'un site Web ou d'une appli mobile 10 Mars 2017