Allora, il mio nuovo problema abbastanza stupido (ma mi mancano dei passaggi logici a volte) è una variabile che non passa come vorrei che facesse.
Per prima cosa la classe che gestisce la connessione al db:
Codice PHP:
class connessionedb {
// parametri per la connessione al database
private $nomehost = "localhost";
private $nomeuser = "user";
private $password = "pass";
private $database = "db";
public $connetti;
// funzione per la connessione a MySQL
public function __construct() {
$connetti = new mysqli($this->nomehost,$this->nomeuser,$this->password, $this->database);
if ($connetti->connect_errno) {
echo "Failed to connect to MySQL: " . $connetti->connect_error;
} else {
return $connetti;
}
}
}
come si vede in ultimo, il construct di questa classe ritorna una $connetti.
A questo punto ho un'altra classe abbastanza grande, la quale fa una serie di operazioni che vanno a buon fine, fino al metodo InsertDb che riporto sotto. Chiamo la connessione (nell'implementazione che non ho riportato poichè non si giustifica a dovere come testo e sarebbe complicata da leggere) e poi parte il metodo, il quale però rileva $connetti con undefined variable.
Codice PHP:
public function InsertDB() {
$query = "INSERT into tabella (old_id, VALUES ($this->old_id)"; $this->inserisci = mysqli_query($connetti, $query); if (!$this->inserisci) { die('Error:' . mysqli_error($connetti)); } else { return $this->inserito = true; } }
Le domande sono 3:
1) Perchè nonostante il return, $connetti non è definita?
2) In linea più generale, qual'è il sistema giusto per passare una variabile da un'istanza e poi richiamarla in una funzione successiva? (che è un pò quello che faceva in procedurale il comando global)
3) E' logicamente giusto separare la connessione in una classe diversa da quella della query o dovrebbero (sempre per logica) far parte entrambe di una stessa classe? E in questo secondo caso, come passo l'array da inserire (più o meno la stessa domanda del punto 2)?
Grazie mille e chiedo ancora scusa per questi dubbi un pò così, ma ci sono veramente dei passaggi che o te li spiega chi ha esperienza, o probabilmente nessun manuale nè spiegazione scritta riporta a dovere.