IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

[Syntaxe] utilisation d'une fonction dans mysql


Sujet :

SQL Procédural MySQL

  1. #1
    Membre averti Avatar de mussara
    Inscrit en
    Novembre 2004
    Messages
    442
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2004
    Messages : 442
    Points : 348
    Points
    348
    Par défaut [Syntaxe] utilisation d'une fonction dans mysql
    bonsoir à tous

    j'essaie d'utiliser une fonction au sein d'une requête mysql mais j'ai un message d'erreur et je tourne en rond... je ne vois pas d'où provient cette erreur...

    si quelqu'un a de meilleurs yeux que moi...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    <?php
    function son2( $sIn ) /// SOUNDEX 2 V FRANCAISE
    {
    /// Si il n'y a pas de mot, on sort immédiatement
    if ( $sIn === '' ) return ' ';
    /// On met tout en minuscule
    $sIn = strtoupper( $sIn );
    /// On supprime les accents
    $sIn = strtr( $sIn, 'ÂÄÀÇÈÉÊËŒÎÏÔÖÙÛÜ', 'AAASEEEEEIIOOUUU' );
    /// On supprime tout ce qui n'est pas une lettre
    $sIn = preg_replace( '`[^A-Z]`', '', $sIn );
    /// Si la chaîne ne fait qu'un seul caractère, on sort avec.
    if ( strlen( $sIn ) === 1 ) return $sIn . ' ';
    /// on remplace les consonnances primaires
    $convIn = array( 'GUI', 'GUE', 'GA', 'GO', 'GU', 'CA', 'CO', 'CU', 'Q', 'CC', 'CK' );
    $convOut = array( 'KI', 'KE', 'KA', 'KO', 'K', 'KA', 'KO', 'KU', 'K','K', 'K' );
    $sIn = str_replace( $convIn, $convOut, $sIn );
    /// on remplace les voyelles sauf le Y et sauf la première par A
    $sIn = preg_replace( '`(?<!^)[EIOU]`', 'A', $sIn );
    /// on remplace les préfixes puis on conserve la première lettre
    /// et on fait les remplacements complémentaires
    $convIn = array( '`^KN`', '`^(PH|PF)`', '`^MAC`', '`^SCH`', '`^ASA`', '`(?<!^)KN`', '`(?<!^)(PH|PF)`', '`(?<!^)MAC`',
    '`(?<!^)SCH`','`(?<!^)ASA`' );
    $convOut = array( 'NN', 'FF', 'MCC', 'SSS', 'AZA', 'NN', 'FF', 'MCC', 'SSS', 'AZA' );
    $sIn = preg_replace( $convIn, $convOut, $sIn );
    /// suppression des H sauf CH ou SH
    $sIn = preg_replace( '`(?<![CS])H`', '', $sIn );
    /// suppression des Y sauf précédés d'un A
    $sIn = preg_replace( '`(?<!A)Y`', '', $sIn );
    /// on supprime les terminaisons A, T, D, S
    $sIn = preg_replace( '`[ATDS]$`', '', $sIn );
    /// suppression de tous les A sauf en tête
    $sIn = preg_replace( '`(?!^)A`', '', $sIn );
    /// on supprime les lettres répétitives
    $sIn = preg_replace( '`(.)\1`', '$1', $sIn );
    /// on ne retient que 4 caractères ou on complète avec des blancs
    return substr( $sIn . ' ', 0, 4);
    }
     
    $db = mysql_connect($hostname, $username, $password);
    mysql_select_db($database,$db);
    $sql = "SELECT champ1,champ2,champ3
    	FROM matable WHERE son2(champ1)=son2(".$mavariable.")";
    echo $sql;
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    if(mysql_num_rows($req)>0) {
    	list($c1, $c2, $c3) = mysql_fetch_row($req);
    	echo "<em style='color:red'=>le nom ".$c1." existe à ".$c2."</em><br/>";
    }
    ?>
    et j'obtiens l'erreur suivante:
    SELECT champ1,champ2,champ3 FROM matable WHERE son2(champ1)=son2(valeur)Erreur SQL !
    SELECT champ1,champ2,champ3 FROM matable WHERE son2(champ1)=son2(valeur)
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(champ1)=son2(valeur)' at line 2
    merci de votre aide

  2. #2
    Membre éprouvé Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Points : 1 154
    Points
    1 154
    Par défaut
    Ben oui tu confond serveur php et serveur mysql, le probleme est que tu envoie cette chaine telle quelle au serveur mysql:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT champ1,champ2,champ3 FROM matable WHERE son2(champ1)=son2(valeur)
    Tu as mis l'appel de ta fonction dans une string, donc le serveur php ne s'en rend pas compte et l'envoie au serveur mysql sans y toucher et le serveur mysql ne connait pas la fonction "son" donc il en veut pas.
    Il va falloir que tu trouves une autre solution, comme récupérer la liste des champ1, ne garder que ceux qui valident son(champ1) = son(tavariable), par exemple dans un tableau tab, puis faire une deuxieme requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql= "SELECT champ1, champ2, champ3 FROM tatable WHERE champ1='".tab[1]."' OR champ1='".tab[2].'"
    etc...
    Veuillez agréer nos sentiments les plus distingués. Soyez assurés de notre entière collaboration, bien à vous pour toujours et à jamais dans l'unique but de servir l'espérance de votre satisfaction, dis bonjour à ton père et à ta mère, bonne pétanque, mets ton écharpe fais froid dehors.

  3. #3
    Membre averti Avatar de mussara
    Inscrit en
    Novembre 2004
    Messages
    442
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2004
    Messages : 442
    Points : 348
    Points
    348
    Par défaut
    j'ai en effet mis en oeuvre une autre solution, à savoir intégrer directement les valeurs de "son" dans une autre colonne

    merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/04/2008, 15h24
  2. utilisation d'une fonction dans SSIS
    Par caballero dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 26/06/2007, 10h15
  3. Bug lors de l'utilisation d'une fonction dans une macro.
    Par monf29 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/06/2007, 14h35
  4. utilisation d'une fonction dans un cham texte
    Par Mat_DZ dans le forum Général JavaScript
    Réponses: 16
    Dernier message: 11/09/2006, 14h16
  5. Utilisation d'une fonction dans une procedure
    Par MaxiMax dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 09/08/2005, 15h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo