2011-01-25 2 views
3

Passé plusieurs heures à chercher une réponse sans succès. J'ai écrit une fonction définie par l'utilisateur dans MySQL à laquelle est transmis un identifiant qui permet de récupérer diverses données, de les concaténer en une chaîne et de les retourner. Je veux appeler cette fonction depuis ma page PHP et afficher le résultat.Comment utiliser une fonction définie par l'utilisateur MySQL depuis PHP?

tentatives infructueuses comprennent:

1. $result = mysql_query("select functionName($id)"); 

2. $sql = "select functionName($id)"; 
    $result = mysql_query($sql, $link); 

3. functionName($id) 

Toutes les idées?

+0

Faites-vous référence à une procédure stockée? Si oui, vous devez appeler YourSP() –

+0

Vous êtes sur la bonne voie avec (1) et (2). Quel genre de messages d'erreur recevez-vous? La requête fonctionne-t-elle correctement lorsque vous l'exécutez dans un outil de requête MySQL? –

+0

Les solutions 1 et 2 font la même chose et devraient fonctionner – arnaud576875

Répondre

1

1 et 2 sont proches, mais $result ne contiendra pas le résultat de l'appel de fonction. Plutôt, il va contenir le cookie de résultat de la requête. Vous pouvez utiliser ce cookie pour obtenir les données réelles, avec mysql_fetch_row(). L'appel de fonction renvoie juste une valeur pour l'instruction select, exactement comme "SELECT 42" ou "SELECT a FROM MyTable". Donc, pour obtenir le résultat, vous utiliserez le même mécanisme qu'avec toute autre requête SQL qui renvoie des résultats; c'est-à-dire, utilisez le cookie et appelez mysql_fetch_row(). Donc, votre code final ressemblera à ceci:

$result = mysql_query("select functionName($id)"); 
$row = mysql_fetch_row($result, $link); 
$returnValue = $row[0]; 

Notez que vous ne voulez pas être interpoler les variables directement dans une chaîne SQL (qui peut être un vecteur pour les attaques). Je suppose, cependant, que ce code est juste à titre d'exemple.

+0

La valeur de $ id a été transmise à partir de la page de sélection de recherche précédente pour identifier l'enregistrement auquel l'utilisateur souhaite accéder. Quelle est la manière sûre pour moi de faire ceci? – Chelle

+0

@Chelle: utilisez 'mysql_real_escape_string()' sur la valeur de '$ id':' $ sql = "sélectionnez functionName (" .mysql_real_escape_string ($ id, $ link). ")" ', Puis utilisez $ sql' dans 'mysql_query()' – siride

+0

votre méthode pour désinfecter '$ id' n'est pas ** adéquate; considérons par exemple le comportement si «$ id» contient '3) FROM Utilisateurs WHERE 1 = 1 -' (la requête résultante est 'select functionName (3) FROM Users WHERE 1 = 1 -)'; la fonction est exécutée une fois pour chaque ligne de la table 'Users', si elle existe). – Hammerite

0

J'ai eu la même question et trouvé ce haut d'écriture très utile de DEVX, particulièrement la partie en bas à appeler les fonctions MySQL:

http://www.devx.com/webdev/Article/42887/0/page/2

En ce qui concerne mysqli, mon code est maintenant comme suit :

$result = mysqli_query($sqlconnection,"SELECT functionName($id)"); 
$row = mysqli_fetch_row($result); 
return $row[0]; 

fonctionne parfaitement.

Questions connexes