Newsgroup: it.comp.www.php
Titolo: Problema con una query.

Ciao a tutti,
riscontro uno strano problema eseguendo una query in php.
Brevemente, la tabella è cosi definita:
                       $sql = "CREATE TABLE `database`.`tabella` (
                                    `id` BIGINT UNSIGNED NOT NULL 
AUTO_INCREMENT ,
                                    `name` VARCHAR( 64 ) CHARACTER SET utf8 
COLLATE utf8_unicode_ci NOT NULL ,
                                    `value` BIGINT UNSIGNED NOT NULL ,
                                  PRIMARY KEY ( `name` ) ,
                                  INDEX ( `id` )
                                ) ENGINE = MYISAM";
E all'interno della tabella ho per esempio 2 record:
ID         NAME         VALUE
1           pippo            1
2           caio               2
Ora io voglio interrogare il db per sapere se pippo è presente nella tabella 
e scrivo:
                       $sql = 'SELECT * FROM `tabella` WHERE `name` LIKE 
`pippo` ';
e quindi richiamo il comando:
                       echo "record trovati => " . mysql_affected_rows ()  . 
"<br>";
il risultato ottenuto è sempre: -1.
Mi sarei dovuto aspettare il valore 1 essendo presente una sola riga che 
soddisfa la condizione di WHERE, invece no!
Dove sbaglio? Come dovrei correggere la query per ottenere il risultato 
voluto?
Non riesco a venirne fuori, confido nel vostro aiuto.
Grazie in anticipo,
Cooper.
 

 Cooper.
Non devi usare mysql_affected_rows(), perchè esso ti restituisce il numero 
di righe coinvolte nell'ultima query INSERT, UPDATE o DELETE.
Nel tuo caso ( hai una query di SELECT ) devi usare mysql_num_rows()
Paolo


Dunque, ho corretto scrivendo:
            [Linea 89]         $row = mysql_num_rows (mysql_query ('SELECT * 
FROM `tabella` WHERE `name` LIKE `caio` '));
E mi viene restituito il valore 0 anche quando l'elemento è nella tabella.
            Warning: mysql_num_rows(): supplied argument is not a valid 
MySQL result resource in [PERCORSO] on line 89
Come devo risolvere il problema?
Grazie ancora,
Cooper. 


 Dunque, ho corretto scrivendo:




PS: Dimenticavo, da phpmyadmin, eseguendo la query:
       SELECT * FROM `tabella` WHERE `name` LIKE `caio`
Ottengo l'errore:
     #1054 - Unknown column 'caio' in 'where clause'
Ho guardato i dettagli dell'errore nel sito ufficiale, ma riesco a capire 
l'errore.
Ancora grazie a chi mi può dare una mano a risolvere il problema.
 

 l'errore.
l'argomento di LIKE mettilo tra apici singoli, gli apici invertiti non ti
servono:
mysql_query ("SELECT * FROM tabella WHERE name LIKE 'caio'")
-- 
Web marketing & community management:
http://www.insistema.com/

 Grazie ancora,
Prego!
Paolo 


Niente da fare, mi da sempre lo stesso errore :( cosa faccio? 

>
Hai provato a vedere se la query č corretta o se da errore?
$sql="SELECT * FROM tabella WHERE name LIKE 'caio'";
$res=mysql_query($sql) or die("Errore : " . mysql_error());
$nr=mysql_num_rows($res);
echo $nr;
Se ti restituisce 0 vuol dire che il record che cerchi...semplicemente non 
c'č...
Paolo 

 Niente da fare, mi da sempre lo stesso errore :( cosa faccio?
scusa , ma questa query dalla shell mysql, va o non va?



Non andava per via degli apici, ma adesso ho risolto grazie a voi, eppure ce 
li mette phpmyadmin 


Ok adesso funziona, il problema era dovuto agli apici.
Un ultima cosa, se volessi caricare in un array tutta la tabella, come 
dovrei fare? Ho provato a scrivere:
              $sql = "SELECT * FROM `tabella` ";
              $result = mysql_query ($sql);
              $ch = mysql_fetch_array ($result);
              print_r ($ch);
perň mi restituisce solo la prima riga, mentre io voglio poter visualizzare 
tutte le righe della tabella.
Cosa ho sbagliato?  Come dovrei correggere le righe di sopra?
Grazie ancora,
Cooper. 

 Cooper.
Non hai sbagliato nulla! Ottieni quello che si deve ottenere! Per poter 
visualizzare, o meglio, memorizzare i dati della table in un array, devi 
ciclare attraverso i risultati della query...qualcosa del tipo
(Per semplicità assumo che la tabella abbia solo due campi: c1 e c2)
$result = mysql_query ($sql);
while($row=mysql_fetch_array($result))
{
  $mio_array[]=array('c1'=>$row['c1'],
                     'c2'=>$row['c2']
                    );
}
print_r($mio_array);
...e vedrai tutti i records della tabella...
Paolo

 
Dimenticavo....
$sql = "SELECT * FROM `tabella` "; => NO
$sql = "SELECT * FROM tabella "; => SI
non ti incasinare con gli apici quando non servono ;-)
Paolo