+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 8 su 8

Clausola Like

  1. #1
    sanfra non è in linea Scolaretto
    Salve, ho un progetto dove tramite una classe e dei metodi devo fare delle ricerche particolari e queste ricerche devono avere la clausola "Like" che a me non funzionano, con ogni probabilità sto sbagliando qualche sintassi, anche se a me il compilatore non mi dà nessun errore, ma allo stesso tempo non mi da nessun risultato.

    Questo è il codice:

    Codice PHP:
    switch ($tipo){
            
            case 
    'Data':
            
    $this->TH();
            try {
            
    $conn=DB::conn();
            
    $query="SELECT * FROM operazioni WHERE Data LIKE '%$ricerca'";
            
    $res=@mysql_query($query);
            while (
    $row=@mysql_fetch_assoc($res)) {
                
    $this->TD($row);
            }
            }
            catch (
    Exception $er){
                echo 
    $er->getMessage();
                
            }
            
    mysql_close($conn);
            break; 
    Qualcuno mi può aiutare li sto provando tutti

    Grazie

  2. #2
    L'avatar di bottomap
    bottomap non è in linea Amanuense
    Ciao,

    Apparentemente non ci sono errori sintattici, ma Data che tipo di campo è? Un datetime?

    Dovresti inoltre ripulire $ricerca prima di usarlo, in presenza di caratteri particolari (', %, _) può non comportarsi come vorresti...
    Facci anche un esempio di interrogazione... cosa hai nella tabella e cosa vuoi ottenere dalla select like...

    La classe DB cos'è, quella del Pear o qualcosa che hai scritto tu?
    Le mysql_<xxx> non lanciano eccezioni, la try/catch intercetta quelle eventualmente lanciate dalla DB:conn (o dalla TD della tua classe)...
    Mi pare che nemmeno il pear DB lanci eccezioni, ma non lo conosco a fondo...

    PS: Il compilatore non ti da alcun errore? Intendevi l'interprete php immagino...

    Ciaociao
    Ultima modifica di bottomap; 04-08-2007 13:20 
    ℹ️ Leggi di più su bottomap ...

  3. #3
    sanfra non è in linea Scolaretto
    Nel mio progetto non c'è solo il campo data cn il quale fare una ricerca del genere, l'ho fatto anche cn il campo telefono,nominativo e un altro campo.Cmq il campo data nel db è date, nella ricerca è una campo stringa;glialtri campi sono tutti campi stringa.

    per ripulirlo intendi con "htmlspecialchars"?

    allora io ho un campo select(una combo) e lì in base alla scelta della select(Data,Nominativo,telefono, rec),c'è di sotto un campo input text dove digitare la chiave di ricerca e il pulsante ricerca che richiama la classe in base al tipo di ricerca(se è nominativo, ect..) e la chiave(l'input);

    la classe DB l'ho scritta io e in effetti non lanci eccezioni!
    perchè all'interno della classe db c'è solo la connessione al DB e poi una funzione per gestire appunto l'escape dei caratteri;

    intendevo l'interprete php;
    Ultima modifica di sanfra; 04-08-2007 14:04 

  4. #4
    L'avatar di bottomap
    bottomap non è in linea Amanuense
    Ciao,

    Non ho ben capito la distinzione che menzioni
    il campo data nel db è date, nella ricerca è una campo stringa
    Cosa intendi esattamente con "nella ricerca"?

    In ogni caso dubito che tu possa usare la LIKE con i campi date (è una funzione specifica per le stringhe)... puoi usare la BETWEEN <x> AND <y> se hai bisogno di specificare un intervallo oppure le classiche =,>=,<=,>,<,!=,<>...
    Se hai proprio bisogno di utilizzare la like potresti convertire nella query (non ricordo la funzione - TO_DATE, TO_CHAR, CONVERT, ogni dmbs ha le sue), ma mi pare superfluo, le funzioni dette poc'anzi dovrebbero esserti più che sufficienti...

    Per ripulire, la htmlspecialchars ha effetto (come dice il nome) sui caratteri propri dei tag html e non ti aiuta in questo frangente...
    Potresti usare la strtr() per rimpiazzare manualmente i caratteri che ti ho indicato, oppure utilizzare metodi più fini come la costruzione della query con placeholder (i PreparedStatement del java), l'uso di mysql_real_escape_string o l'abilitazione della magic_quotes_gpc e magic_quotes_runtime.

    Ciaociao
    ℹ️ Leggi di più su bottomap ...

  5. #5
    sanfra non è in linea Scolaretto
    "nella ricerca" intendevo dire che durante la query la chiave "data" gli faccio appunto un conversione come dicevi tu,ma lo faccio quando richiamo la classe e prendo la variabile dall'array superglobale $_GET;

    La Between in questo frangente non mi serve perchè non devo estrapolare delle date in un arco di tempo bensì è una data precisa!

    cmq gli altri campi come il nominativo, il telefono ect.. sono tutti campi stringa, ma non funziona lo stesso questo il LIKE;

    il fatto di ripulire lo faccio con la funzione che ti dicevo prima ed é contenuta nella classe del DB:
    Codice PHP:
    public static  function mega_escape_string($in_string)
      {
          
        
    $str ereg_replace('([\'%;])''\\\1'$in_string);
        
    $str1 htmlspecialchars($str);
        

        return 
    $str1;
      } 
    inoltre volevo dirti che senza il percentuale funziona regolarmente,però avendo il campo nominativo fatto di cognome e nome(PIPPO Pluto), se io vado a mettere solo PIPPO non mi dà nulla nè senza '%' che con quest'ultimo! e così vale per tutte le altre ricerche!
    quindi è proprio il simbolo % che non gli piace.
    e anche in questo modo non mi dà nessun risultato.

    Potresti spiegarmi cos'è query con placeholder (i PreparedStatement del java) e come faccio ad usarlo?
    Ultima modifica di sanfra; 04-08-2007 20:09 

  6. #6
    astra2006 non è in linea Novello
    Quote Originariamente inviato da sanfra Visualizza il messaggio
    Salve, ho un progetto dove tramite una classe e dei metodi devo fare delle ricerche particolari e queste ricerche devono avere la clausola "Like" che a me non funzionano, con ogni probabilità sto sbagliando qualche sintassi, anche se a me il compilatore non mi dà nessun errore, ma allo stesso tempo non mi da nessun risultato.

    Questo è il codice:

    Codice PHP:
    switch ($tipo){
            
            case 
    'Data':
            
    $this->TH();
            try {
            
    $conn=DB::conn();
            
    $query="SELECT * FROM operazioni WHERE Data LIKE '%$ricerca'";
            
    $res=@mysql_query($query);
            while (
    $row=@mysql_fetch_assoc($res)) {
                
    $this->TD($row);
            }
            }
            catch (
    Exception $er){
                echo 
    $er->getMessage();
                
            }
            
    mysql_close($conn);
            break; 
    Qualcuno mi può aiutare li sto provando tutti

    Grazie
    Prova così:
    $query="SELECT * FROM operazioni WHERE Data LIKE '%$ricerca%' ";

  7. #7
    L'avatar di bottomap
    bottomap non è in linea Amanuense
    Ciao,

    Scusa tanto, ma %$ricerca trova le parole che terminano con quella che desideri... il % significa "qualsiasi sottostringa" %PIPPO trova tutte le stringhe del tipo APIPPO, UN_PIPPO, S_PIPPO, PIPPO, ma non "PIPPO Pluto" (perché non termina con la stringa PIPPO)...

    Se vuoi cercare qualcosa che comincia per $ricerca dovrai usare LIKE $ricerca%

    Ciaociao
    ℹ️ Leggi di più su bottomap ...

  8. #8
    sanfra non è in linea Scolaretto
    Grazie, per il tuo prezioso aiuto,ma il problema era quando richiamavo la funzione (ricerca) nella pagina che poi andava a fare la ricerca vera,infatti prendevo le variabili tramite $_GET[] quando dovevo prenderle per $_poST,e $_GET aveva il simbolo + quando univa il nome e il cognome e come uno stupido e principiante non mi sono reso conto

    Comunque grazie molte di tutto

    anche se ho bisogno di altro aiuto quindi a tra poco

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Recordset clausola WHERE
    Da Frankq_it nel forum Visual Basic 6
    Risposte: 0
    Ultimo Post: 09-08-2020, 14:24
  2. Query con clausola AND
    Da paoloet nel forum Microsoft Access
    Risposte: 20
    Ultimo Post: 14-05-2019, 08:58
  3. Quesito su clausola GROUP BY
    Da rossomike1966 nel forum Microsoft Access
    Risposte: 1
    Ultimo Post: 07-03-2016, 21:07
  4. Problema con la Clausola GROUP BY
    Da dan1987 nel forum Visual Basic 6
    Risposte: 10
    Ultimo Post: 16-04-2008, 09:50
  5. [SQL]Clausola WHERE variabile: possibile?
    Da Hamelin [FL] nel forum Altri Database Server
    Risposte: 3
    Ultimo Post: 23-03-2006, 11:46