Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Errore misterioso in query SQL

    ciao a tutti...

    sto sviluppando una web app per un laboratorio di analisi. Il problema è che hoc reato una funzione di ricerca libera in alcune tabelle, ad esempio quella clienti. Poichè la ricerca libera deve essere effettuata su tutti i campi della tabella ho creato una funzione di classe che preleva dalle tabelle di sistema i nomi dei campi mettendoli in un array e li usa poi in un ciclo FOREACH epr costruire la query di ricerca libera, come nel codice seguente:

    Codice PHP:
    // TESTO contiene il testo da cercare liberamente in tutta la tabella
    $param "%" urldecode($_REQUEST['testo']) . "%";$sql "SELECT * FROM anaclienti WHERE";
    // crea un array coi nomi dei campi della tabella scelta
    $fields $cliente->getFieldsTableNames("anaclienti");
    foreach (
    $fields as $field)
       
    $sql .= " LOWER(CONVERT(" $field['Field'] . " USING utf8mb4)) LIKE '" $param "' OR";
    $sql .= substr($sql0strlen($sql) - 3);
    // crea un array di record
    $rows $cliente>arrayRecords($sql); 
    ma la query non viene eseguita per un misterioso errore di sintassi "ORSELECT * FROM anaclienti WHERE" ecc !!! come fa ad apparire un OR all'inizio della query???
    Ultima modifica di Emulman; 29-10-2015 a 12:23

  2. #2
    Più chiaro di così! Il messaggio ti dice tutto, non hai lasciato lo spazio dopo l'OR
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    non cambia nulla...e il bello è che la query l'ho copiata da una funzione di ricerca di HeidiSQL un potente gestore di DB open source..se copio la stringa generata da HeidiSQL tutto bene, la stessa generata dal mio script PHP niente con quell'OR !!! e per giunta se visualizzo la query generata dal mio script inizia solo con SELECT, se poi la copio e la faccio usare da PHPMyAdmin o heidiSQL mi dice che c'è quell'errore ORSELECT * FROM !!!
    Ultima modifica di Emulman; 29-10-2015 a 12:54

  4. #4
    Quote Originariamente inviata da Emulman Visualizza il messaggio
    non cambia nulla...e il bello è che la query l'ho copiata da una funzione di ricerca di HeidiSQL un potente gestore di DB open source..se copio la stringa generata da HeidiSQL tutto bene, la stessa generata dal mio script PHP niente con quell'OR !!! e per giunta se visualizzo la query generata dal mio script inizia solo con SELECT, se poi la copio e la faccio usare da PHPMyAdmin o heidiSQL mi dice che c'è quell'errore ORSELECT * FROM !!!
    a mio parere se posti l'SQL è più facile cercare di aiutarti

  5. #5
    Quote Originariamente inviata da Emulman Visualizza il messaggio
    non cambia nulla...
    Cosa significa "non cambia nulla"?!

    Codice PHP:
    ...
    $sql .= " LOWER(CONVERT(" $field['Field'] . " USING utf8mb4)) LIKE '" $param "' OR";
    ... 

    dopo l'OR manca lo spazio.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  6. #6
    la query generata da PHP è molto lunga, ne metto solo una parte...come vedi però è corretta perchè anche se dopo OR non c'è spazio la riga col LOWER seguente provvede già lei ad inserire lo spazio...il problema è che apapre un OR subito prima di SELECT che vorrei capire da dove viene fuori!!!

    SELECT * FROM `bioconsult`.`anaclienti` WHERE LOWER(CONVERT(`ID` USING utf8mb4)) LIKE '%core%' OR LOWER(CONVERT(`societa` USING utf8mb4)) LIKE '%core%' OR LOWER(CONVERT(`tipoSocieta` USING utf8mb4)) LIKE '%core%' OR LOWER(CONVERT(`cognome` USING utf8mb4)) LIKE '%core%' OR LOWER(CONVERT(`nome` USING utf8mb4)) LIKE '%core%' OR LOWER(CONVERT(`dataNascita` USING utf8mb4)) LIKE '%core%' OR LOWER(CONVERT(`comuneNascita` USING utf8mb4)) LIKE '%core%' OR LOWER(CONVERT(`indirizzo` USING utf8mb4)) LIKE '%core%' OR LOWER(CONVERT(`numCiv` USING utf8mb4)) LIKE '%core%' OR LOWER(CONVERT(`cap` USING utf8mb4)) LIKE '%core%' OR LOWER(CONVERT(`comuneRes` USING utf8mb4)) LIKE '%core%' OR LOWER(CONVERT(`provincia` USING utf8mb4)) LIKE '%core%' OR LOWER(CONVERT(`citta` USING utf8mb4)) LIKE '%core%' OR LOWER(CONVERT(`codFisc` USING utf8mb4)) LIKE '%core%' OR LOWER(CONVERT(`pIVA` USING utf8mb4)) LIKE '%core%' OR LOWER(CONVERT(`codAgente` USING utf8mb4)) LIKE '%core%' OR LOWER(CONVERT(`tel1` USING utf8mb4)) LIKE '%core%' OR LOWER(CONVERT(`tel2` USING utf8mb4)) LIKE '%core%' OR LOWER(CONVERT(`tel3` USING utf8mb4)) LIKE '%core%' OR LOWER(CONVERT(`email` USING utf8mb4)) LIKE '%core%' OR LOWER(CONVERT(`indirizzoLegale` USING utf8mb4)) LIKE '%core%' OR LOWER(CONVERT(`numCivLegale` USING utf8mb4)) LIKE '%core%' OR LOWER(CONVERT(`capLegale` USING utf8mb4)) LIKE '%core%' OR LOWER(CONVERT(`comuneResLegale1` USING utf8mb4)) LIKE '%core%'

  7. #7
    Modifica:

    Codice PHP:
    ...
    $sql .= substr($sql0strlen($sql) - 3);
    ... 

    con:

    Codice PHP:
    ...
    $sql substr($sql0strlen($sql) - 3);
    ... 
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.