Classe database: restiruire array da query

peppeocchi

Utente Attivo
20 Apr 2013
30
0
0
Ciao a tutti,
ho un quesito che mi sta "mangiando l'anima".

Ho la mia bella classe database, con le classiche funzioni
connetti() <- connette al database
query() <- esegue una query

fetchrow() <- ????
fetchall() <- ???

poi ho il mio bel file php che creato l'oggetto, esegue
connessione
query: fa una select dei dati di una tabella
chiamata a fetchall
output risultati

posto un po' di codice così è più chiaro

la classe
PHP:
<?php
class mysql_db
{
	private $sql;

	public function __construct($username, $password, $database, $host)	{
		if($conn = mysql_connect($host,$username,$password) or die (mysql_error())) {
			$selectDB = mysql_select_db($database,$conn) or die (mysql_error());
		}
	}

	public function query($sql) {
		$this->sql = mysql_query($sql) or die (mysql_error());
	}

	public function fetchrow() {
		
	}

	public function fetchall() {
		
	}

	public function __destruct() {
		mysql_close();
	}
}
?>

e l'altro file
PHP:
require_once("mysql.php");

//Create the mySQL object
$sqlDB = new mysql_db('username', 'password', 'database', 'localhost');

//perform an sql query to select the first 10 values in the db
$sqlDB->query("SELECT * FROM test ORDER BY id ASC LIMIT 10");

//get the 10 rows
$rows = $sqlDB->fetchall();

foreach ($rows as $row)
{
	echo $row['id'].": ".$row['name']."<br/>";
}

Bene, come proseguo? In pratica con fetchall() dovrei restituire l'array della select.
Ho provato con "return mysql_fetch_array($this->sql)", ma restituisce le prime due righe della tabella.
L'utilità dell'altra funzione fetchrow() qual'è secondo voi?
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Prova cosi
PHP:
public function fetchall() { 
         $return = array();
         while($row=mysql_fetch_array($this->sql)) $return[] = $row;
         return $return;
    }

Comunque mysql è deprecato, vedi mysqli o pdo con i loro metodi fetch_all o fetchAll
 

peppeocchi

Utente Attivo
20 Apr 2013
30
0
0
Ottimo funziona, grazie mille!

Invece riguardo a fetchrow()?

Qualche idea sull'utilità di questa funzione?

Scusa la mia domanda da ignorante, ma ha senso usare PDO o mysqli dentro questa classe?
Cioè, non hanno i loro metodi per connessione query eccetera?
Non creerei dei metodi di metodi?
Ha senso creare un metodo come questo?

public function query($sql) {
mysqli->query($sql);
}


Grazie per la pazienza
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Ottimo funziona, grazie mille!

Invece riguardo a fetchrow()?

Qualche idea sull'utilità di questa funzione?
In che senso? E' vuoto quel metodo

Scusa la mia domanda da ignorante, ma ha senso usare PDO o mysqli dentro questa classe?
Cioè, non hanno i loro metodi per connessione query eccetera?
Non creerei dei metodi di metodi?
Un metodo lo puoi chiamare anche pinco_pallo, ma la cosa principale non è come si chiama ma cosa fa

Ha senso creare un metodo come questo?

public function query($sql) {
mysqli->query($sql);
}

Grazie per la pazienza
E' sintatticamente errato, dovrebbe essere $this->mysqli->query($sql), dove ovviamente mysqli sarebbe la nuova istanza di mysqli.
Comunque detto ciò aggiungi magari la gestione degli errori o un opzione (tramite argomento della funzione ad esempio) che permetta di avere direttamente il fetch o il numero dei record trovati
 

peppeocchi

Utente Attivo
20 Apr 2013
30
0
0
Nel senso che mi hanno dato questi due file
PHP:
<?php
require_once("mysql.php");

//Create the mySQL object
$sqlDB = new mysql_db('root', 'p3pp3', 'testami', 'localhost');

//perform an sql query to select the first 10 values in the db
$sqlDB->query("SELECT * FROM test ORDER BY id ASC LIMIT 10");

//get the 10 rows
$rows = $sqlDB->fetchall();

foreach ($rows as $row)
{
	echo $row['id'].": ".$row['name']."<br/>";
}

//insert a new value
$newID = $sqlDB->insert("test", array("name" => "Hello World!"));

//update the value to a new value
$sqlDB->update("test", array("name" => "Goodbye World!"), "id = $newID");
e
PHP:
<?php
/**
mysql Class
You are required to complete this unfinished class so that test.php runs as it is meant to
You may also add in any error reporting or analytics that you feel would improve this class
**/

class mysql_db
{

	public function __construct($username, $password, $database, $host)	{
	
	}

	public function query($sql) {
	}

	public function insert($table, $values) {
	}
	
	public function update($table, $values, $where) {
	}

	public function fetchrow() {
	}

	public function fetchall() {
		
	}

}
?>

Ovviamente questo secondo file lo devo completare io, il primo non lo posso modificare.
E' un test, io in genere uso PDO per le operazioni di connessione e gestione del database, ma credo sarebbe strano se mi chiedessero di costruire una classe e dentro gli mettessi un'istanza PDO che fa quello che in realtà dovrei scrivere io in quei metodi.
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Nel senso che mi hanno dato questi due file
PHP:
<?php
require_once("mysql.php");

//Create the mySQL object
$sqlDB = new mysql_db('root', 'p3pp3', 'testami', 'localhost');

//perform an sql query to select the first 10 values in the db
$sqlDB->query("SELECT * FROM test ORDER BY id ASC LIMIT 10");

//get the 10 rows
$rows = $sqlDB->fetchall();

foreach ($rows as $row)
{
	echo $row['id'].": ".$row['name']."<br/>";
}

//insert a new value
$newID = $sqlDB->insert("test", array("name" => "Hello World!"));

//update the value to a new value
$sqlDB->update("test", array("name" => "Goodbye World!"), "id = $newID");
e
PHP:
<?php
/**
mysql Class
You are required to complete this unfinished class so that test.php runs as it is meant to
You may also add in any error reporting or analytics that you feel would improve this class
**/

class mysql_db
{

	public function __construct($username, $password, $database, $host)	{
	
	}

	public function query($sql) {
	}

	public function insert($table, $values) {
	}
	
	public function update($table, $values, $where) {
	}

	public function fetchrow() {
	}

	public function fetchall() {
		
	}

}
?>

Ovviamente questo secondo file lo devo completare io, il primo non lo posso modificare.
E' un test, io in genere uso PDO per le operazioni di connessione e gestione del database, ma credo sarebbe strano se mi chiedessero di costruire una classe e dentro gli mettessi un'istanza PDO che fa quello che in realtà dovrei scrivere io in quei metodi.
Chi ti ha detto di implementare la classe ti ha anche detto cosa dovranno fare precisamente i metodi? Riscoprire l'acqua calda non serve a niente, ne tanto meno farlo con un vecchio rubinetto(mysql). Se vuoi una buona esercitazione potresti provare ad organizzare una classe per la preparazione e i risultati di una query con PDO.

es.
PHP:
public function query($query,$valori=array()){
  try{

      $this->result = $this->pdo->prepare($query);
      $this->result->execute($valori); 

   }catch(PDOExcpetion $e){ die($e->getMessage()); }
}
 
Ultima modifica:

peppeocchi

Utente Attivo
20 Apr 2013
30
0
0
Chi ti ha detto di implementare la classe ti ha anche detto cosa dovranno fare precisamente i metodi?

I metodi devono permettere all'altro file di completare correttamente l'esecuzione, ma non essendoci traccia di fetchrow(), probabilmente volevano che lo usassi dentro la classe.

Il fatto è che guardando il codice del primo file che mi hanno dato, ha davvero poco senso, e soprattutto inutile, tirare su una classe con tutti questi metodi.
faccio un ciclo dentro la classe nel metodo fetchall(), che restituisce un array, e faccio un altro ciclo per mandarne in output il contenuto.
fetchall e fetchrow non prendono in input nessun parametro.

E' un test per vedere quanto me la cavo con la programmazione ad oggetti.
Quello che penso io è che dovrei richiamare fetchrow() dentro al ciclo di fetchall() mantenendo l'accoppiamento key => valore.

Sono solo io che vedo tanta inutilità in questa classe?

Tra l'altro non posso organizzarla neanche come mi pare, ho quei metodi che prendono quei parametri.
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
I metodi devono permettere all'altro file di completare correttamente l'esecuzione, ma non essendoci traccia di fetchrow(), probabilmente volevano che lo usassi dentro la classe.

Il fatto è che guardando il codice del primo file che mi hanno dato, ha davvero poco senso, e soprattutto inutile, tirare su una classe con tutti questi metodi.
faccio un ciclo dentro la classe nel metodo fetchall(), che restituisce un array, e faccio un altro ciclo per mandarne in output il contenuto.
fetchall e fetchrow non prendono in input nessun parametro.

E' un test per vedere quanto me la cavo con la programmazione ad oggetti.
Se è un'esercitazione prova ad idearla te una classe per la gestione delle query, non basarti sul far girare un determinato file, e dato che dovrebbe essere un'esercitazione per l'oop ti consiglio vivamente di farla con mysqli o pdo, con mysql non avrebbe senso.

Quello che penso io è che dovrei richiamare fetchrow() dentro al ciclo di fetchall() mantenendo l'accoppiamento key => valore.

Sono solo io che vedo tanta inutilità in questa classe?

Tra l'altro non posso organizzarla neanche come mi pare, ho quei metodi che prendono quei parametri.
fetch_all()
 
Discussioni simili
Autore Titolo Forum Risposte Data
L Problemi con classe di astrazione per il database PHP 20
P [RISOLTO]Classe database: connessione in costruttore? PHP 7
L Classe database e metodo pubblico PHP 21
L classe per inserire dati al database PHP 2
G classe CSS sovrascritta HTML e CSS 2
L php tinymce mi duplica la classe label PHP 3
P jButton1ActionPerformed passare parametri ad altra classe Java 2
L creare oggetti da una classe tramite un form Javascript 0
A Riproduzione classe Vector C/C++ 3
C [PHP] Estrarre da una classe i valori che mi interessano PHP 5
O Estendere una rete di classe C Reti LAN e Wireless 1
tucu49 PHP include classe PHP 8
M [PHP] Estendere Connessione a una Classe PHP 1
M [PHP] utilizzo di una classe e delle sue funzioni PHP 2
tritabit Classe MysqliDb mancante nelle librerie arc2 PHP 2
D [PHP] assegnare una classe PHP 1
W [PHP] Creazione classe PDO PHP 4
S Copiare attributi da una classe. Programmazione 0
D [PHP] chiamata metodi da una classe PHP 3
L [PHP] login con la classe medoo.in PHP 5
macus_adi Classe PHP per la Geolocalizzazione del visitatore Snippet PHP 0
B [Javascript] Cambiare classe ed aggiornare relativi eventi Javascript 3
M [wordpress-galleria immagini]Inserire classe php in html PHP 0
L [PHP] Classe che non vede i suoi metodi PHP 3
A [Javascript] Mancata aggiunta di una classe al click Javascript 1
A [PHP] metodo di una classe per estrarre i dati con ciclo while PHP 1
C [PHP] Metodo di una classe in sltra classe PHP 1
Shyson [WordPress] Mettere classe css WordPress 0
V [PHP] utilizzo di metodi statici in altra classe PHP 5
Sevenjeak [C#] Aiuto esportazione tema su libreria di classe ( dll ) .NET Framework 1
elpirata [PHP] [RISOLTO] Stampare classe css in base al risultato della query PHP 6
C Classe Prenotazione con 2 scelte Java 2
A modificare .jar con classe personalizzata Java 9
Rikk73 Passare come argomento in un metodo un parametro della classe istanziata PHP 0
M Visualizzare da una classe esistente ogni profilo utente PHP 1
napuleone Modificare attributi di una classe con js Javascript 2
C Upload immagini con classe non funzionante PHP 1
A chiamate con istanza di altra classe rispetto la classe di app. (plugin) PHP 1
M aggiungere classe al click Javascript 1
M Assegnare un id o classe a una variabile php PHP 5
P Inserire classe su script Google Analitics Magento 0
N Dare id ad elementi classe jQuery 1
otto9due Postare tweet con immagine cosa aggiungere a questa classe? PHP 0
C Errore con classe PHP 4
Marco_88 Aiuto Oggetti da Classe PHP 0
otto9due Qualcuno mi dice dove sbaglio in questa classe .. PHP 4
A Creare una classe espressione Java 1
F Aggiungere classe/id immagine jQuery 3
C Leggere variabili esterne ad una classe in php 5.2 PHP 6
L classe upload [Problema cartella] PHP 1

Discussioni simili