Page 1 sur 1

Select exclusif accents

Posté : 21 juin 2017, 23:33
par Couin
Hello :)

En rapport avec ce sujet, je cherche à pouvoir faire un select exclusif avec accents.

Je m'explique :

J'ai une colonne "titre" dans la table playlist de ma db, j'ai admettons dedans :
pepe
pépé

Si je fais dans phpmyadmin

Code : Tout sélectionner

SELECT titre FROM playlist WHERE titre LIKE '%é%'
Il me retourne tout ce qui contient é et e , à savoir pepe et pépé .
Si je rajoute collate utf8_bin pour faire

Code : Tout sélectionner

SELECT titre FROM playlist WHERE titre LIKE '%é%' collate utf8_bin
phpmyadmin me retourne bien que pépé

En revanche, si j'applique la même méthode dans le script d'autocomplete , tout en désactivant le if isset get term pour pouvoir exécuter la page directement :

Code : Tout sélectionner

// if (isset($_GET['term'])){ // $wideterm = '%'.utf8_decode($_GET['term']).'%'; $wideterm = '%é%'; $return_arr = array(); try { $conn = new PDO("mysql:host=".DB_SERVER.";dbname=".DB_NAME, DB_USER, DB_PASSWORD); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $conn->prepare('SELECT titre,datepl FROM playlist WHERE (titre LIKE :term collate utf8_bin ) GROUP BY titre ORDER BY titre ASC, datepl DESC'); $stmt->execute(array('term' => $wideterm )); while($row = $stmt->fetch()) { $bonus = ''; $bonus0 = '0'; $bonus1 = '0'; $bonustext = ''; $titre = addslashes($row['titre']); $stmt2 = $conn->prepare('SELECT bonus FROM playlist WHERE (titre LIKE :term2 ) '); $stmt2->execute(array('term2' => $titre)); while($row2 = $stmt2->fetch()) { $bonus = $row2['bonus'] ; if ( $bonus == '0' ) { $bonus0++; } if ( $bonus == '1' ) { $bonus1++; } } if ( $bonus0 == 0 && $bonus1 == 0 ) { $bonustext = ''; } if ( $bonus0 != 0 && $bonus1 == 0 ) { $bonustext = ''; } if ( $bonus0 == 0 && $bonus1 != 0 ) { $bonustext = ' (Bonus)'; } if ( $bonus0 != 0 && $bonus1 != 0 ) { $bonustext = ''; } // $return_arr[] = $row['titre'] . " (" . $row['datepl'] . ")" . $bonustext . "<br>"; $return_arr[] = utf8_encode($row['titre']) . " (" . $row['datepl'] . ")". $bonustext ; } } catch(PDOException $e) { echo 'ERROR: ' . $e->getMessage(); } /* Toss back results as json encoded array. */ echo json_encode($return_arr); // }
J'ai comme erreur :
ERROR: SQLSTATE[42000]: Syntax error or access violation: 1253 COLLATION 'utf8_bin' is not valid for CHARACTER SET 'latin1'[]

Mon fichier php est encodé en "UT8 (sans BOM)" , la colonne titre, est en titre utf8_general_ci , la table playlist est latin1_swedish_ci (mais si je change pour ut8_bin ou ut8_general_ci, c'ets pas mieux, toujours meme erreur), la base est en utf8_bin .
Sachant que je n'ai jamais rien compris à ces encodages (les caractères accentués s'affichent en losanges noir si je change, etc etc, dans la configuration actuelle, les pages php doivent être écrites comme ca &eacute;crites pour que ca s'affiche bien).

Je ne sais pas du tout où chercher , donc si quelqu'un a une astuce , je suis preneur :)

Merci
Couin