Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [mysql+php] errore nella scrittura di un record in un DB

    Ciao a tutti..ho un problemino che mi sta facendo impazzire...uos una classe PHP per collegarmi ad un DB:

    Codice PHP:
    class Utils 
        protected 
    $host
        protected 
    $userName
        protected 
    $password
        protected 
    $database

        function 
    __construct() { 
          
    $this->host 'localhost'
          
    $this->userName 'emulman_vallicom'
          
    $this->password 'vallicom'
          
    $this->database 'emulman_vallicom'
        } 
        
    //********** DATABASE METHODS ********** 
        
    public function recordExists($sql$mode=1) { 
          
    $row NULL
          
    // riga che mi da errore 
          
    $mysqli = new mysqli($this->host$this->userName$this->password$this->database); 
         
    // eccetera 
    ora, quando cerco di memorizzare un record nel database ricevo semrpe questo errore:

    Warning: mysqli::mysqli() [mysqli.mysqli]: (28000/1045): Access denied for user 'emulman_vallicom'@'localhost' (using password: YES) in /home/emulman/public_html/hotspot/class/utils.php on line 21

    come mai? eppure username e password sono corretti, li ho creati da phpmyadmin...

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    mmh... tanto per cominciare i dati sono tutti corretti? intendo: user+pw dici di sì, ma il server? alcuni provider usano server MySQL "separati" e devi usare per il server l'ip che ti forniscono

  3. #3
    sicurissimo...server localhost..come anche da immagine...
    Immagini allegate Immagini allegate

  4. #4
    finalmente ho trovato l'errore! penso che sia un bug di PHP...dunque come ho riportato nel codice qui sopra creo delle variabili di classe protected fra cui una di nome '$password' in una classe di uso generale. Ne ho poi una specifica che estende quella generale e che usa anch'essa una variabile public di nome '$password'. in pratica:

    Codice PHP:
    class Generale {
      protected 
    $host;
      protected 
    $userName;
      protected 
    $password;
      protected 
    $database;

      function 
    __construct() {
        
    $this->host 'localhost';
        
    $this->userName 'username';
        
    $this->password 'password';
        
    $this->database 'db';
      }
      
    //resto della classe
    }

    class 
    xyz extends Generale{
      public 
    $nome;
      public 
    $indirizzo;
      public 
    $password// qui nasce l'errore!
      //resto della classe
    }

    $generale = new Generale();
    $xyz = new xyz();
    $xyz->password 'abcdef'
    in pratica la variabile password di xyz sostituisce la medesima della classe generale, perciò non potevo entrare nel database perchè usava la password sbagliata! per risolvere il problema ho cambiato il nome di password in xyz:

    Codice PHP:

    class xyz extends Generale{
      public 
    $nome;
      public 
    $indirizzo;
      public 
    $passwd// correzione errore!
      //resto della classe
    }

    $xyz = new xyz();
    // ora funziona tutto correttamente ed entro pure nel database!
    $xyz->passwd 'abcdef'

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    ...oltre al fatto che non vedo un "extends" nel codice postato, non è un bug: se ho capito come hai organizzato le classi allora è il comportamento corretto (v. nota estendere attributo/metodo protetto ): manca qualche altro pezzo di codice? ...

  6. #6
    no no è così..anzi chiedo scusa che non ho messo l'extends in xyz, me ne ero dimenticato! cmq rimane il fatto che penso proprio sia un bug di PHP: meglio non usare lo stesso nome di variabili in due classi si cui una estende un'altra!

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    ma perchè dici che è un bug? tu estendi una classe e il metodo dell'ultima sovrascrive quello "originale"... è proprio l'estensione questa... cosa ti saresti aspettato in questo caso, invece, o cmq cosa avresti voluto ottenere usando lo stesso nome?

  8. #8
    io pensavo che essendo di due tipi diversi, una protected ed una public si comportassero in modo diverso, data la differenza di scope, ma evidentemente non è così..e giudico questo comportamento non normale...

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    mmh... in realtà dipende ovviamente dall'implementazione del linguaggio, anche se in linea di massima l'overload ha senso quando ci sono firme (parametriche) diverse... cmq ho capito il tuo dubbio adesso

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.