Newsgroup: it.comp.www.php
Titolo: alternativa a implode su query con IN e testo

if ( is_array($mio_elenco_numeri) )
	$mio_elenco_numeri = implode(',' , $mio_elenco_numeri);		
	$query = SELECT tab.ID, tab.numero
			FROM tabella as tab
			WHERE tab.iD>100
			AND tab.numero IN ($mio_elenco_numero);
tale codice, dove la ricerca viene fatta solo tra numeri funziona;
se invece devo fare una ricerca di un testo dentro un elenco di parole
non funziona più;
forse il problema è nell'implode che trasformando un array in stringa non
mette gli apici agli elementi della stringa;
siccome la query,a differenza di quando cerco i numeri, per cercare il
testo serve confrontare il suo valore con del testo tra apici, non trovando
gli apici, non funziona;
si puo' risolvere?

 si puo' risolvere?
al volo
implode('","' , $mio_elenco_numeri);		
AND tab.numero IN ('$mio_elenco_numero');
da esc-apare e sistemare, nel caso
-- 
"20060207: buongiorno italia, buongiorno maria.
con gli occhi pieni di malinconia"

artev ha scritto:

prima di implode(',', ....)
    usa:
it.php.net/foreach
    oppure
it.php.net/array_walk
o altri ventiseimila modi ...

 da esc-apare e sistemare, nel caso
non funziona;
funziona solo se nell'array c'è un elemento solo
(prima neanche con l'elemento solo funzionava)
non è che con la soluzione che hai indicato ad esempio se ho due elementi
pippo e pluto, con la soluzione che hai indicato succede questo:
pippo "," pluto
cioè il primo e l'ulltimo elemento rimangono senza ";
forse si potrebbe usare qualche accortezza per far aggiungere
inizio e fine stringa tali apici dopo aver fatto l'implode ?

 
it.php.net/foreach
non so se il suggerimento consisteva nel dire di trasformare prima di
implode l'array; in un array in cui gli elementi hanno i doppi apici prima;
ho provato questo ma non funziona
foreach ($mio_elenco_testo as $value) {
   $value = '"'.$value.'"';}

artev ha scritto:

puoi provare con "as &$value "
(che non ho scritto prima perche' non si dovrebbero fare
dodici cose contemporaneamente)
oppure con array_walk che ti consiglio
qualora ti sorgesse la necessita' di ripetere l'operazione
   per quotare i valori sql si usano gli apici singoli, tu stai usando
le virgolette
   passa $value a mysql_real_escape_string
immagina una stringa "D'amico" ad esempio

volevo provare a modificare l'esempio di magilla 
che è più alla mia portata;
avendo una stringa come faccio ad aggiungere all'inizio e alla fine 
un apice "?
------

 un apice "?
Per esempio, usando l'operatore per concatenare le stringhe: '.'
<?php
$stringa = 'Ciao';
$stringa = '"'.$stringa.'"';
echo $stringa;
?>
-- 
Federico

 un apice "?
se devi usarlo in una query sql devi usare l'apice singolo e non le virgolette
cmq
$v = 'a';
$v_quoted =  "'".$v."'";

seguiro' i tuoi consigli;
ma per il problema mio iniziale c'č una soluzione apposita?
cioč avendo un array testo e una sql che deve cercare in uno di questi
elementi testo, qual'č la soluzione che generalmente si usa?
conosci link con esempi specifici ?

 elementi testo, qual'è la soluzione che generalmente si usa?
array_walk() e implode() e` la soluzione specifica, come ti ha gia` detto
hk3project.
Per favore quota decentemente.
Bye.

 si puo' risolvere?
$sql =" .... AND tab.numero IN('" . implode("','" , $mio_elenco) . "') 
....";
C'e' un problema: escapare il contenuto di $mio_elenco. Ovvero se 
$mio_elenco contiente:
$mio_elenco[] ="abc";
$mio_elenco[] = "a'c";
Il giochino non funziona -:)
Potresti preventivamente dare una passata di addslash (o meglio ancora 
mysql_real_escape_string a tutti gli elementi dell'array) oppure 
utilizzare array_walk o foreach
	Francesco