Query sql con risultato sbagliato

di il
7 risposte

Query sql con risultato sbagliato

Ciao a tutti.

Non riesco a risolvere un problema che mi "tortura" da diversi giorni.
Il codice è questo:

$querynumero1= "SELECT order_id FROM  order_items WHERE order_item_name ='Sonatas & Partitas'";
$risultato_query_n_1 = $conn->query($querynumero1);
$rows = mysqli_fetch_assoc($risultato_query_n_1);
Ora: il risultato è NULL, seppur di record nel database ce ne siano.
Lo stesso problema non accade con altri order_item_name. Dove sto sbagliando?
Grazie.

7 Risposte

  • Re: Query sql con risultato sbagliato

    Ci fai vedere il risultato della stessa SELECT senza WHERE? Magari mostra solo il record che dovrebbe essere estratto.
  • Re: Query sql con risultato sbagliato

    Magari il problema sta proprio nel nome 'Sonatas & Partitas' forse gli spazi oppure &, fai una prova rinominandolo.
  • Re: Query sql con risultato sbagliato

    ninja72 ha scritto:


    Magari il problema sta proprio nel nome 'Sonatas & Partitas' forse gli spazi oppure &, fai una prova rinominandolo.
    E' un problema di codifica UTF.
    prova ad eseguire questa query per averne la conferma:
    
    SELECT order_id FROM  order_items WHERE order_item_name like 'Sonatas%' or order_item_name like '%Partitas'
    
  • Re: Query sql con risultato sbagliato

    $querynumero1= "SELECT order_id FROM order_items WHERE order_item_name ='Sonatas & Partitas'";
    if(($risultato_query_n_1 = $conn->query($querynumero1)) !== false) {
    $rows = mysqli_fetch_assoc($risultato_query_n_1);
    } else {
    $rows = array('query false');
    }
    var_dump($rows);
    Puoi verificare se la query non restituisce false?
    Ovviamente stai solo recuperando order_id sei sicuro non potrà mai essere con valore null?
  • Re: Query sql con risultato sbagliato

    tatino ha scritto:


    ninja72 ha scritto:


    Magari il problema sta proprio nel nome 'Sonatas & Partitas' forse gli spazi oppure &, fai una prova rinominandolo.
    E' un problema di codifica UTF.
    prova ad eseguire questa query per averne la conferma:
    
    SELECT order_id FROM  order_items WHERE order_item_name like 'Sonatas%' or order_item_name like '%Partitas'
    
    Ti rispondo subito.
    1) Circa il nome, è quello che penso anche io. Infatti con altri nomi, che hanno spazi (ma non la &) il problema non c'è
    2) La tua query funziona benissimo, il problema è che ci sono alcuni corsi che hanno alcuni termini in comune. Rischio di avere risultati imprecisi.
    Ora, la domanda è: come posso risolvere mantenendo la stringa così com'è?

    Grazie
  • Re: Query sql con risultato sbagliato

    theitaliancoder ha scritto:


    Ora, la domanda è: come posso risolvere mantenendo la stringa così com'è?
    1) Configurando MYSQL:
    - imposta come Collection utf8_general_ci per l'intero database;
    - imposta come Collection utf8_general_ci per tutte le tabelle;
    - imposta come Collection utf8_general_ci il campo che conterrà il testo con la &;

    2) Tramite PHP:
    - subito dopo aver avviato la connessione al database eseguire il comando
    mysql_query("set names utf8"); oppure mysql_set_charset("UTF8");
    nella pagina html imposta all'interno del tag head
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    per stampare correttamente a video i caratteri.

    Ciauz
  • Re: Query sql con risultato sbagliato

    Scusate spero sia di aiuto ma ampersand è sempre 26 in esadecimale sia UTF-8 o comunque qualsiasi codifica che usi la sottocodifica US ASCII, ANSI X3.4-1986 non è un carattere speciale se delimitata dagli apici singoli (gergo stringa letterale mysql).
    $mysqli = new mysqli("localhost", "my_user", "my_password", "my_db");
    
    if (!$mysqli) {
        echo "Error: Unable to connect to MySQL." . PHP_EOL;
        echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
        echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
        exit;
    }
    $query = 'CREATE TABLE IF NOT EXISTS order_items_dup (
        order_id     INT AUTO_INCREMENT PRIMARY KEY,
        order_item_name     VARCHAR (30)        DEFAULT NULL
    );';
    ($mysqli->query($query));
    $query = "INSERT INTO order_items_dup (order_item_name) VALUES ('Sonatas & Partitas')";
    if(($mysqli->query($query)) !== false) {
    	echo 'inserimento effettuato';
    }
    $query = "SELECT order_id FROM order_items_dup WHERE order_item_name ='Sonatas & Partitas'";
    if(($result = ($mysqli->query($query))) !== false) {
    	/* fetch associative array */
        while ($row = ($result->fetch_assoc())) {
            var_dump($row);
        }
    
        /* free result set */
        ($result->free());
    }
    
    /* close connection */
    ($mysqli->close());
    Probabilmente non stai salvando & ma &AMP; &amp; &#x00026; &#38; etc.
    Per questo ti ho proposto il codice di controllo se almeno la query non restituisce errore (false).
Devi accedere o registrarti per scrivere nel forum
7 risposte