|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
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; } }[ } ?> ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
Ragas sto impazzendo! Ci dev'essere dietro la classica svista...
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Ciao, da questo
Codice:
$result->fetch_array(MYSQLI_BOTH); |
![]() |
![]() |
![]() |
#4 |
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. |
![]() |
![]() |
![]() |
#5 |
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.
|
![]() |
![]() |
![]() |
#6 |
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? |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Quote:
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 } |
|
![]() |
![]() |
![]() |
#8 |
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; } }[ |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Quote:
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 ![]() |
|
![]() |
![]() |
![]() |
#10 |
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. |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
E' un array, ma quell'array contiene dei campi, i campi del tuo db, ma relativi al primo record che ottieni dalla query.
|
![]() |
![]() |
![]() |
#12 |
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! |
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Quote:
Altre query hai detto che invece funzionano vero? |
|
![]() |
![]() |
![]() |
#14 |
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.
|
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Incollala qui pari pari.
|
![]() |
![]() |
![]() |
#16 |
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.
|
![]() |
![]() |
![]() |
#17 |
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']).'"'); ![]() 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? |
![]() |
![]() |
![]() |
#18 |
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); } |
![]() |
![]() |
![]() |
#19 |
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. |
![]() |
![]() |
![]() |
#20 | |
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Quote:
Non capisco perchè non vuoi usare il fetch come si dovrebbe... ed è anche molto più comodo di come vorresti fare tu. |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:19.