php
  • sqlsrv
  • 2016-03-23 1 views 0 likes 
    0

    Je recherche un champ dans une table SQL Server 2005. J'utilise quelque chose commeRequête SQL Server avec PHP - caractère spécial en français

    $query = "select * from TableName where replace (replace (client , 'é' ,'e') , 'ç' ,'c') COLLATE French_CI_AI = 'Agence française du texte agréable'"; 
    

    Je peux demander à la table pour obtenir le nom sans le « où » l'article, mais je ne peux pas demander si j'utiliser ce nom spécifique « Agence française du texte agréable » dans un où la clause

    Tous les autres noms travaillent, je suppose donc que le problème est lié à la « C » ou « é » caractère

    merci pour votre aide!

    ------------- -------------- EDIT

    merci pour votre anwser. J'ai fait un autre test en enlevant le ç et é, comme ceci 'Agence française du texte agreable'

    Et je ne peux toujours pas obtenir les informations! Alors finalement, où est mon problème? ... J'ai aussi testé $ query = "select * from Table où client = 'Agence française du texte agreable'";

    et la ressource de retour de var_dump (4, Déclaration SQL Server)

    et var_dump du fetch_array, retourne null

    Je ne comprends pas ... cela fonctionne avec d'autres noms :(

    ---------- EDIT 2 --------------

    Trouvé que mon problème vient du fait que je n'avais qu'un seul résultat, et mon code n'a pas fonctionné alors Puis changé mon code avec

    $query = "select * from Table where client COLLATE French_CI_AI = 'Agence française du texte agréable'"; 
    
    // SQLSrv_num_rows requires a static or keyset cursor. 
    if (strncmp(ltrim(strtoupper($query)), 'SELECT', strlen('SELECT')) == 0) 
    { 
    $array = array('Scrollable' => SQLSRV_CURSOR_KEYSET); 
    } 
    else 
    { 
    $array = array(); 
    } 
    
    $cursor = sqlsrv_query($db, $query, array(), $array); 
    $row = sqlsrv_fetch_array($cursor, SQLSRV_FETCH_NUMERIC); 
    

    je vous remercie tous pour votre aide!

    +1

    utf les comparaisons permettraient '' é '=' e'' d'être 'true'. Si vous essayez de SUPPRIMER les caractères accentués du champ 'client', alors comparer avec une chaîne qui contient les caractères que vous venez de supprimer? "enlève cette pomme et remplace-la par une orange, hey, pourquoi n'est-ce plus une pomme?" –

    +0

    Pouvez-vous décrire un peu plus le problème que vous essayez de résoudre? – BPS

    +0

    J'ai trouvé mon problème. Comme vous avez dit que je n'en ai pas besoin, j'ai apporté quelques modifications et j'ai constaté que dès que ma requête n'obtenait qu'un seul résultat, je ne pouvais pas le lire. (voir les changements de code dans mon premier message) – cedric

    Répondre

    0

    Je ne pense que vous avez même pas besoin d'enlever les caractères spéciaux du tout (par exemple: le remplacer()) pourquoi ne pas simplement faire juste:

    $query = "select * from TableName COLLATE French_CI_AI = 'Agence française du texte agréable'"; 
    

    alors si vous voulez vraiment supprimer les caractères français pour une raison quelconque:

    $ result = str_replace ("é", "e", str_replace ("C", "c" résultat) de $;

    de cette façon, vous pouvez toujours remplacer les caractères français et pas désordre jusqu'à votre requête

    +0

    merci pour votre réponse. – cedric

     Questions connexes

    • Aucun problème connexe^_^