Query restituisce sempre 0 valori

Antonio102

Utente Attivo
12 Set 2014
36
0
6
Ciao a tutti, ho un problema con una query. La tabella 'vocabolario' su cui sto eseguendo la query e' composta da 2 colonne, 'id' (primary, ai) e 'vocabolo' (varchar, max 100), mentre la query in questione e' la seguente

Codice:
SELECT 'id' FROM `vocabolario` WHERE vocabolo='abate'

dove sta l'errore? Perche' ritorna sempre 0 righe?
 
La query è corretta, prova:
1) ad eseguirla direttamente nel tuo database tramite phpmyadmin
2) esistono record che soddisfano la tua query? Sei sicuro? Sempre tramite phpmyadmin, posizionati nella tabella desiderata e utilizzando la funziona "cerca", cerca il vacobolo "ABATE".
 
La query è corretta, prova:
1) ad eseguirla direttamente nel tuo database tramite phpmyadmin
2) esistono record che soddisfano la tua query? Sei sicuro? Sempre tramite phpmyadmin, posizionati nella tabella desiderata e utilizzando la funziona "cerca", cerca il vacobolo "ABATE".

1) provata sempre direttamente da phpmyadmin
2) restituisce sempre 0 righe, ti allego uno screen del database

db.jpg
 
Scusami, ma colonna ID dov'è?

ho ricreato il database senza la colonna id, tanto non era necessaria, era solamente un prova. Il mio scopo e' quello di verificare se una parola che io passo tramite script php e' presente nel database. Avevo inserito la colonna id per verificare se mi veniva restituita una riga come risultato
 
giusto per evitare che degli spazi possano influenzare la ricerca,
prova ad eseguire le 2 query sottostanti,

Codice:
SELECT * FROM vocabolario WHERE vocabolo like '%abate%'

SELECT * FROM vocabolario WHERE vocabolo='abate'
 
Caio, aggiungo ...
riprendendo la prima query postata, quando esisteva ancora la colonna id ,
gli apici sul nome del campo non ci vanno.
Codice:
SELECT id FROM `vocabolario` WHERE vocabolo='abate'
 
giusto per evitare che degli spazi possano influenzare la ricerca,
prova ad eseguire le 2 query sottostanti,

Codice:
SELECT * FROM vocabolario WHERE vocabolo like '%abate%'

SELECT * FROM vocabolario WHERE vocabolo='abate'

la prima query funziona ma non fa al caso mio, ho bisogno che venga ricercata la parola esatta. La seconda fuori restituisce 0 righe, e continuo a non capirne il perche'
 
ciao
così a naso, se la prima query funziona, cioè cerca il/i record un cui il campo vocabolo contenga abate, mentre la seconda no
sei sicuro che nel campo ci sia scritto esattamente abate? che non ci siano caratteri, es spazi prima e/o dopo, che diano fastidio?
 
ora per favore esegui la query sottostante e fai sapere il risultato
ciao
Marino
Codice:
SELECT * FROM vocabolario WHERE TRIM(vocabolo)='abate'
 
ciao
così a naso, se la prima query funziona, cioè cerca il/i record un cui il campo vocabolo contenga abate, mentre la seconda no
sei sicuro che nel campo ci sia scritto esattamente abate? che non ci siano caratteri, es spazi prima e/o dopo, che diano fastidio?

nessuno spazio e/o carattere. I vocaboli in origine erano dentro un file .txt, una parola per ogni riga, che ho inserito nel database con questo script

PHP:
$words = file('parole.txt');

$conn= mysqli_connect('127.0.0.1','root','','esame') or die("Connection failed: " . $conn->connect_error);

foreach ($words as $wor)
{
$word = mysqli_real_escape_string($conn,$wor);
$insert = mysqli_query($conn,"INSERT INTO vocabolario (vocabolo) VALUES ('$word')");
}
if ($insert === TRUE)
echo 'Vocabolario inserito con successo'.'<br>';
else
echo mysqli_error($conn);

$conn->close();

ora per favore esegui la query sottostante e fai sapere il risultato
ciao
Marino
Codice:
SELECT * FROM vocabolario WHERE TRIM(vocabolo)='abate'

niente sempre 0 righe
 
PHP:
<?php
$words = file('parole.txt'); 

foreach ($words as $wor) 
{ 
var_dump($wor);
} 
?>

risultato :
string(9) "parola1 " string(9) "parola2 " string(9) "parola3 " string(9) "parola4 " string(9) "parola5 " string(9) "parola6 " string(9) "parola7 "
si trascina lf-cr (Windows)
ciao
Marino
 
PHP:
<?php
$words = file('parole.txt'); 

foreach ($words as $wor) 
{ 
$word = substr($wor, 0, strlen($wor) - 2);
var_dump($word);
} 
?>

risultato :
string(7) "parola1" string(7) "parola2" string(7) "parola3" string(7) "parola4" string(7) "parola5" string(7) "parola6" string(7) "parola7"
 
PHP:
<?php
$words = file('parole.txt'); 

foreach ($words as $wor) 
{ 
$word = substr($wor, 0, strlen($wor) - 2);
var_dump($word);
} 
?>

risultato :
string(7) "parola1" string(7) "parola2" string(7) "parola3" string(7) "parola4" string(7) "parola5" string(7) "parola6" string(7) "parola7"

come potrei risolvere?
 
se lavori con windows hai 2 caratteri in più, con altri probabilmente hai solo 1 carattere in più
puoi provare con lo script ridotto che ti ho postato io

per risolvere, io rifarei l'inserimento nel database (dopo aver svuotato la tabella) in modo da avere il db pulito
nel tuo script devi inserire la "substr" che elimina i caratteri non voluti

ciao
Marino
 
credo di aver risolto cosi

PHP:
$words = file('parole.txt');

$conn= mysqli_connect('127.0.0.1','root','','esame') or die("Connection failed: " . $conn->connect_error);

$h = fopen('parole.txt','r'); 

while (!feof($h)) // Loop til end of file.
{
$wor = fgets($h);
$words = str_replace (array("\n", "\r\n", "\r"),"",$wor);
$word = mysqli_real_escape_string($conn,$words);
$insert = mysqli_query($conn,"INSERT INTO vocabolario (vocabolo) VALUES ('$word')");
}
if ($insert === TRUE)
echo 'Vocabolario inserito con successo'.'<br>';
else
echo mysqli_error($conn);

$conn->close();

ne approfitto per un altra domanda, come eseguo una query case insensitive? se nel mio database ho abate scritto tutto minuscolo voglio che la query restituisca il risultato sia che cerchi ABATE o Abate
 
Ultima modifica:
Ciao, prova ad eliminare gli apici da id e vocabolario.
Codice:
SELECT id FROM vocabolario WHERE vocabolo='abate'
In particolare per vocabolario hai usato il carattere di accento e non l'apice. Il problema potrebbe dipendere da questo.
 
puoi usare
PHP:
$word = "ABATE"
$word = strtolower($word)
$word = mysqli_real_escape_string($conn,$word);
non dimenticare quest'ultima visto che l'hai usata per caricare il db
ciao
Marino
 

Discussioni simili