Type

Résolu
Bonjour,

Voila mon problème :

j'ai une table avec comme clé primaire un champ ID de type uniqueidentifier et j'aimerais exécuter la requête suivante:

$id=$_REQUEST["id_client"];
$res=mssql_query("select Contact_Name from contact where ID='$id' order by Contact_Name;");

la variable $id récupère la clé primaire ID de type uniqueidentifier;

Lorsque je lance ce script le message d'erreur suivant s'affiche :

Warning: mssql_query() [function.mssql-query]: message: Échec de la conversion d'une chaîne de caractères en uniqueidentifier.

En revanche lorsque que je remplace la variable directement par une valeur de l'ID tel que : 928D7F36-9A31-42FC-98CF-00AEC2FE665C tous marche bien :

$res=mssql_query("select Contact_Name from contact where ID='928D7F36-9A31-42FC-98CF-00AEC2FE665C' order by Contact_Name;");

- Dois-je effectuer une conversion de la variables $id avant de l'utiliser dans la requête ?
- Avez vous une solution a mon problème ?

Merci.
Configuration: Windows XP
Firefox 3.0.5

1 réponse

  1. Je ne sais pas en quel language tu programmes mais tu dois oublier de concatener ta chaine sql
    essaie un truc du style
    $res=mssql_query("select Contact_Name from contact where ID=''' & $id & "' order by Contact_Name;");

    Tu vois ce que je veux dire
    A plus
    1. Je programme en PHP et normalement je n'ai pas besoin de container la requête, et si dans un autre cas cela pourrait marcher la syntaxe serait la suivante :

      $res=mssql_query("select Contact_Name from contact where ID='".echo $id. "' order by Contact_Name;");

      mais le problème du type uniqueidentifier c'est que l'affichage (echo $id) de la variable renvoie une chaine incohérente du type : Ó_&â91òH¦0˜xçû6p

      c'est pourquoi j'avais penser a une conversion mais a vrai dire j'en est aucune idée xD
    2. Contributeur
      @SonyBonjour,
      Ca aurait été
      $res=mssql_query("select Contact_Name from contact where ID='".$id. "' order by Contact_Name;"); plutôt...

      Pour ton problème, c'est parce qu'il ne faut pas utiliser $_REQUEST, mais $_POST ou $_GET (ça dépend de la méthode d'envoi de ton formulaire, à configurer en html).

      Cordialement,
    3. @Marco la baraqueBonjour Marco,

      L'utilisation de $_POST ( en accord avec mon formulaire) ne change rien, toujours la même erreur qui s'affiche :

      Warning: mssql_query() [function.mssql-query]: message: Échec de la conversion d'une chaîne de caractères en uniqueidentifier.
    4. @SonyC'est bon j'ai trouvé !!!! =) =)

      en faite il fallait convertir le type uniqueidentifier en chaine de caractère et pour cela une fonction spécifique a sql server existe, il s'agit de la fonction mssql_guid_string()

      pour mon exemple cela donne :

      $id=$_POST["id_client"];
      $str_id=mssql_guid_string($id);
      $res=mssql_query("select Contact_Name from contact where ID='$str_id' order by Contact_Name;");

      Voila pour les prochains qui aurait des problèmes ;)
    5. Contributeur
      @SonyMerci de ton retour.
      J'ai tout de même du mal à comprendre pourquoi une chaîne dans ta request est de type uniqueidentifier...
      Enfin, le problème est résolu !

      Cordialement,