Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo
Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo
Il più recente robot per la pulizia domestica di Dreame, modello Aqua10 Ultra Roller, abbina un potente motore di aspirazione della polvere a un sofisticato sistema di lavaggio con rullo integrato. Il tutto governato dalla logica di intelligenza artificiale, per i migliori risultati
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti
Siamo volati fino a Belfast, capitale dell'Irlanda Del Nord, per scoprire il nuovo Realme 15 Pro 5G Game Of Thrones Limited Edition. Una partnership coi fiocchi, quella tra Realme e HBO, un esercizio di stile davvero ben riuscito. Ma vi raccontiamo tutto nel nostro articolo
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo
Il Gigabyte Gaming A16 offre un buon equilibrio tra prestazioni e prezzo: con Core i7-13620H e RTX 5060 Laptop garantisce gaming fluido in Full HD/1440p e supporto DLSS 4. Display 165 Hz reattivo, buona autonomia e raffreddamento efficace; peccano però le USB e la qualità cromatica del pannello. Prezzo: circa 1200€.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 31-10-2010, 14:34   #1
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
[PHP][Mysql]La query non dà risultati anche se li ha

Salve!
Ho un problemino nell'eseguire una query. La faccenda è curiosa perchè se eseguo la query su phpmyadmin essa da un risultato mentre con il mio script php no.
Dunque la query è la seguente, ma credo che il problema sia da ricercare nella mia classe: SELECT * FROM cms_user WHERE username="super administrator" AND password="<codice hash, o come diamine si chiama>".
La classe:
Codice:
<?php

$mysqli;

class Database {

	//impostazioni 
	private $nomeutente = "root";
	private $password = "";
	private $host = "127.0.0.1";
	private $database = "mattyfog_cms";
	private $prefisso = "cms_";
	private $mysqli;
	//fine impostazioni
	
	public function Connetti() {
		
		$this->mysqli = new mysqli($this->host, $this->nomeutente, $this->password, $this->database);

		if (mysqli_connect_errno())
		{
			$this->mysqli = new mysqli($this->host, $this->nomeutente, $this->password, $this->database);
			
			if (mysqli_connect_errno())
			{
				echo "Errore durante la connessione al DBMS: ".mysqli_connect_error();
				exit();
			}
		}
	}
	
	public function Chiudi() {
		$this->mysqli->close();
	}

	public function Query($query) {
		
/*i vari echo sono stati inseriti per effettuare dei test, ad ogni modo viene stampato il testo '$result è diverso da null'*/
		$result = $this->mysqli->query($query);
		
		echo '$this->mysqli->affected_rows:'.$this->mysqli->affected_rows;
		
		if($this->mysqli->affected_rows > 0) {		
			echo'$result è diverso da null';
			return $result->fetch_array(MYSQLI_BOTH);
		}
		
		else {
			echo'$result è uguale a null';
			return null;
		}
	}[
}
?>
Grazie!
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 01-11-2010, 18:31   #2
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
Ragas sto impazzendo! Ci dev'essere dietro la classica svista...
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 01-11-2010, 22:52   #3
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Ciao, da questo
Codice:
$result->fetch_array(MYSQLI_BOTH);
Cosa ti aspetti di ottenere?
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2010, 12:49   #4
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
Un array contente i risultati e che ha per indici sia i numeri dei campi sia il nome del campi?
Con altre query funziona perfettamente, solo una query non funziona, ma ripeto tale query che non dà risultati con la mia classe, in phpmyadmin funziona e sono sicuro che la query che passo alla classe non contenga errori e che sia la stessa che ho inserito in phpmyadmin.
In ogni caso quando eseguo la quey con cui ho il problema la mia classa ritorna sempre null. La query è: SELECT * FROM cms_user WHERE username="nomeutente" AND password="5f4dcc3b5aa765d61d8327deb882cf99" , ma ripeto su phpmyadmin essa ha dei risultati.
Perchè non va?

Ultima modifica di Mattyfog : 02-11-2010 alle 12:56.
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2010, 17:36   #5
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Ti torna solo un record se lo usi così, e non credo sia quello che tu voglia visto che è alquanto inutile.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2010, 19:53   #6
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
Ti riferisci alla query o alla classe?
Se è la query: la query deve ritornare solo un record.
Se è la classe: perchè dovrebbe tornarmi solo un record? non dovrebbe ritornarmi l'array di record? come risolvo?
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2010, 20:17   #7
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Quote:
Originariamente inviato da Mattyfog Guarda i messaggi
Ti riferisci alla query o alla classe?
Se è la query: la query deve ritornare solo un record.
Se è la classe: perchè dovrebbe tornarmi solo un record? non dovrebbe ritornarmi l'array di record? come risolvo?
Alla funzione che hai fatto.
Ti torna solo il primo record della query, perché $result lo devi ciclare per prendere tutti i record:
Codice:
while($row=$result->fetch_array()){
	//usi $row che rappresenta solo un record
}
In questo modo ottieni tutti record interessati, e per ogni record tiri fuori una array per i campi.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2010, 20:35   #8
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
Quindi restituisce l'array da ciclare, cosa ho detto di sbagliato?
Però il problema, non so se l'ho detto sopra è un altro:
Codice:
public function Query($query) {
		
/*i vari echo sono stati inseriti per effettuare dei test, ad ogni modo viene stampato il testo '$result è diverso da null'*/
		$result = $this->mysqli->query($query);
		
		echo '$this->mysqli->affected_rows:'.$this->mysqli->affected_rows;
		
		if($this->mysqli->affected_rows > 0)  questa condizione non si verifica perchè mysqli->affected_rows risulta uguale a -1{		
			echo'$result è diverso da null';
			return $result->fetch_array(MYSQLI_BOTH);
		}
		
		else {
			echo'$result è uguale a null';
			return null;
		}
	}[
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2010, 20:36   #9
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Quote:
Originariamente inviato da Mattyfog Guarda i messaggi
Quindi restituisce l'array da ciclare, cosa ho detto di sbagliato?
Però il problema, non so se l'ho detto sopra è un altro:
Codice:
public function Query($query) {
		
/*i vari echo sono stati inseriti per effettuare dei test, ad ogni modo viene stampato il testo '$result è diverso da null'*/
		$result = $this->mysqli->query($query);
		
		echo '$this->mysqli->affected_rows:'.$this->mysqli->affected_rows;
		
		if($this->mysqli->affected_rows > 0)  questa condizione non si verifica perchè mysqli->affected_rows risulta uguale a -1{		
			echo'$result è diverso da null';
			return $result->fetch_array(MYSQLI_BOTH);
		}
		
		else {
			echo'$result è uguale a null';
			return null;
		}
	}[
NO!, Ti torna il primo record se fai così, controlla bene.

Si il problema è un altro, ma in tanto risolvi anche quello, per l'altro problema non saprei cosa dirti, dici che la query funziona su phpmyadmin, ma nel tuo progetto no, ora le query che fai pensi siano identiche ma in realtà son diverese, o magari non ti stai connettendo allo stesso db, o tanto altro che mi è difficile verificare da qui
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2010, 20:38   #10
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
Ma il punto è che this->mysqli->affected_rows è uguale a -1 anche se ci dovrebbero essere risultati.
Comunque $result->fetch_array(MYSQLI_BOTH) l'ho trattato come un array senza problemi.
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2010, 20:40   #11
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Quote:
Originariamente inviato da Mattyfog Guarda i messaggi
Ma il punto è che this->mysqli->affected_rows è uguale a -1 anche se ci dovrebbero essere risultati.
Comunque $result->fetch_array(MYSQLI_BOTH) l'ho trattato come un array senza problemi.
E' un array, ma quell'array contiene dei campi, i campi del tuo db, ma relativi al primo record che ottieni dalla query.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2010, 20:41   #12
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
Ok grazie capito! Controllerò!
Però ripeto il problema non è quello! Il problema è che non sono soddisfatte le condizioni del primo null anche se dovrebbero! Perchè $result è uguale a -1!
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2010, 20:42   #13
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Quote:
Originariamente inviato da Mattyfog Guarda i messaggi
Ok grazie capito! Controllerò!
Però ripeto il problema non è quello! Il problema è che non sono soddisfatte le condizioni del primo null anche se dovrebbero! Perchè $result è uguale a -1!
Fai una cosa, fai un echo della query che gli passi, così vediamo com'è in realtà.

Altre query hai detto che invece funzionano vero?
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2010, 20:44   #14
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
Altre query funzionano e il metodo dell'echo l'ho già usato. La query che mi ha stampato l'echo ho provato ad eseguirla su phpmyadmin e dà risultati.
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2010, 20:44   #15
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Incollala qui pari pari.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2010, 20:50   #16
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
Aspetta! Forse sono sparite delle virgolette che orima c'erano! Mmmm ora controllo che stupidaggine ho fatto.
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2010, 20:54   #17
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
Noooooo! Non ci credo! Quando avevo corretto il codice avevo corretto quello che stampava l'echo e non quello che creava la query. Questo mi ha insegnato che la prossima volta prima salvo la query in una variabile poi stampo la variabile, non con cose come queste:
Codice:
echo 'SELECT * FROM cms_user WHERE username="'.$_POST['username'].'" AND password="'.md5($_POST['password']).'"';
		$user_temp = $database->Query('SELECT * FROM cms_user WHERE username="'.$_POST['username'].'" AND password="'.md5($_POST['password']).'"');
Beh almeno è risolto
E in più ho scoperto l'errore che restituisce solo un record.
Senti, non c'è un modo per far si che la query restituisca tutti i record senza usare cicli ma che salvi tutto in un bell'array?
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2010, 21:05   #18
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Vedi mistero risolto

No non c'è, sia fetch_array che fetch_object ti tornano qualocosa di relativo ad un solo record alla volta, ti consiglio comunque di ritornare direttamente $result dalla tua funzione e poi fare il fetch fuori.

Fai una cosa del genere ad esempio:

Codice:
public function Query($query) {
	return $this->mysqli->query($query);
}
Altro consiglio è di utilizzare una classettina che fa già quello che stai cercando di fare: PDO
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2010, 21:14   #19
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
Naa voglio usare la mia di classe, così fatico di più anche se mi sa che soprattutto all'inizio perderò in sicurezza
Comunque credo che genererò un array e farò ritornare quello, performance totali permettendo ovviamente.
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2010, 21:18   #20
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Quote:
Originariamente inviato da Mattyfog Guarda i messaggi
Naa voglio usare la mia di classe, così fatico di più anche se mi sa che soprattutto all'inizio perderò in sicurezza
Comunque credo che genererò un array e farò ritornare quello, performance totali permettendo ovviamente.
Non ha senso perchè devi cicliare due volte l'intero risultato della query, una volta per creare l'array e una per usare l'array. Considera che di solito un databse si usa per contenere molti dati, pensa se devi applicare il tuo metodo ad una query che ti torna 100000 record(per dire)

Non capisco perchè non vuoi usare il fetch come si dovrebbe... ed è anche molto più comodo di come vorresti fare tu.
MEMon è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo Dreame Aqua10 Ultra Roller, la pulizia di casa c...
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti Recensione Realme 15 Pro Game Of Thrones: un ver...
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Lapt...
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Sempre più vicino il lancio (e il...
L'incredibile ottimizzazione di Battlefi...
La NASA aprirà il contratto per i...
PS5 Pro CFI-7121: ecco tutte le differen...
SpaceX ha raggiunto il traguardo dei 10....
ROG Xbox Ally e Ally X sono care, ma il ...
Intesa Sanpaolo: stop all'app Mobile su ...
Gli USA costruiscono chip AI… ma non pos...
Grazie a Ericsson, l'italia è in ...
CMF by Nothing Buds 2a: ANC da 42 dB e o...
Il futuro di Porsche è ibrido: il...
Apple lancia i nuovi MacBook Pro e iPad ...
Free software e biologia: intervista al ...
Dongfeng Box bocciata da Euro NCAP: solo...
Parigi abbandona ufficialmente Eurodrone...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 01:19.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v