Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/03/2007, 20h12   #1
Membre confirmé
 
Avatar de mussara
 
Inscription : novembre 2004
Messages : 441
Détails du profil
Informations personnelles :
Âge : 44

Informations forums :
Inscription : novembre 2004
Messages : 441
Points : 299
Points : 299
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 :
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:
Citation:
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
mussara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2007, 19h36   #2
Membre émérite
 
Avatar de Jidefix
 
Inscription : septembre 2006
Messages : 681
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : septembre 2006
Messages : 681
Points : 865
Points : 865
Ben oui tu confond serveur php et serveur mysql, le probleme est que tu envoie cette chaine telle quelle au serveur mysql:
Code :
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 :
$sql= "SELECT champ1, champ2, champ3 FROM tatable WHERE champ1='".tab[1]."' OR champ1='".tab[2].'"
etc...
Jidefix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2007, 19h40   #3
Membre confirmé
 
Avatar de mussara
 
Inscription : novembre 2004
Messages : 441
Détails du profil
Informations personnelles :
Âge : 44

Informations forums :
Inscription : novembre 2004
Messages : 441
Points : 299
Points : 299
j'ai en effet mis en oeuvre une autre solution, à savoir intégrer directement les valeurs de "son" dans une autre colonne

merci beaucoup
mussara est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h52.


 
 
 
 
Partenaires

Hébergement Web