Problema con prepared statement mysqli

di il
4 risposte

Problema con prepared statement mysqli

Ciao ragazzi! Vi spiego subito il problema che sto riscontrando. Come da titolo è relativo ad una query tramite prepared statement con il LIKE.
Per farla breve ho un db con una tabella cliente in cui ci sono nome, cognome e cf. Nelle variabili $nome, $cognome e $cf ho i parametri da utilizzare per la ricerca (già concatenati con % prima e dopo). Il mio codice di base è questo:

$query = $mysqli->prepare("SELECT * FROM CLIENTE WHERE NOME LIKE ? AND COGNOME LIKE ? AND CF LIKE ?");
$query->bind_param('sss',$nome,$cognome,$cf);
$result=$query->execute();
$array = array();
while($row= mysqli_fetch_assoc($result)) {
            $array[] = $row;
}
echo json_encode($array);
Quando provo ad eseguirlo mi dice che la pagina non funziona (HTTP error 500). Il problema sta sicuramente nell'utilizzo del prepared statement in quanto scrivendo una query direttamente al posto del prepared statement non ho problemi e funziona:


$result=$mysqli->query("SELECT * FROM CLIENTE WHERE nome LIKE '%ro%' ");
$array = array();
while($row= mysqli_fetch_assoc($result)) {
            $array[] = $row;
}
echo json_encode($array);
Ho visto e provato diverse soluzioni in rete, ho provato a modificare rimuovendo % dalle stringhe, utilizzando escape e cose varie ma continua a non funzionare...
Qualcuno sa come risolvere? Magari con un esempio pratico. Grazie

4 Risposte

  • Re: Problema con prepared statement mysqli

    0) mysqli te lo sconsiglio del tutto a favore di PDO
    1) le parentesi nella query
    2) % e % dove saltano fuori?
    3) le " ?
  • Re: Problema con prepared statement mysqli

    +m2+ ha scritto:


    0) mysqli te lo sconsiglio del tutto a favore di PDO
    1) le parentesi nella query
    2) % e % dove saltano fuori?
    3) le " ?
    Grazie della risposta! Cerco di darti qualche elemento in più (e di chiederti di precisare qualcosa che non mi è chiaro):
    0) So che PDO è preferibile ma mi serve solo per fare dei test di un applicativo java quindi nella mia situazione mi è abbastanza indifferente
    1) Non mi è chiaro a quali parentesi ti riferisci. Se intendi quelle dopo il WHERE che racchiudono tutti i LIKE non sono strettamente necessarie in quanto funziona anche senza. Se ti riferisci ad altre parentesi per favore specificamelo perchè non ho capito
    2) Ho il nome (o parte di nome) da cercare in una stringa $str. Io faccio $nome="%".$str."%" per cercare i nomi che contengono quella srtinga. Per esempio se $str="ar", la query dovrebbe restituirmi i vari "marco", "mario", "arcangelo" ecc
    P.s. Ho anche provato a non aggiungere concatenare i % ma continuava a darmi errore
    3) Che problema c'è con " ? Premesso che non sono un esperto di php, (e credo si veda ) un altro script che utilizzo e che fa un'inserimento nel medesimo db è:
    
    $query = $mysqli->prepare("INSERT INTO CLIENTE VALUES(?,?,?)");
             $query->bind_param('sss',$nome,$cognome,$cf);
             $query->execute();
    
    questo script funziona perfettamente e la sintassi di php è la medesima di quello scritto sopra (cambia ovviamente la query), quindi non capisco perchè le virgolette che qui non creano problemi dovrebbero crearne nell'altro.
  • Re: Problema con prepared statement mysqli

    Metti queste funzioni prima di qualsiasi altra parte the codice:
    
    ini_set('error_reporting', E_ALL);
    ini_set('display_errors', 'On');  //On or Off
    
    in questo modo al posto di ricevere un errore 500, riceverai gli errori di PHP.

    Per rendere la modifica permanente su tutti i file dovrai modificare il php.ini .

    Se riesci a ricevere degli errori inviali cosi' possiamo aiutarti meglio.
  • Re: Problema con prepared statement mysqli

    Hexah ha scritto:


    Metti queste funzioni prima di qualsiasi altra parte the codice:
    
    ini_set('error_reporting', E_ALL);
    ini_set('display_errors', 'On');  //On or Off
    
    in questo modo al posto di ricevere un errore 500, riceverai gli errori di PHP.

    Per rendere la modifica permanente su tutti i file dovrai modificare il php.ini .

    Se riesci a ricevere degli errori inviali cosi' possiamo aiutarti meglio.
    Grazie mille! Appena riesco tra stasera e domani li posto
Devi accedere o registrarti per scrivere nel forum
4 risposte