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

PHP & Base de données Discussion :

Problème ODBC DRIVER


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 76
    Points : 52
    Points
    52
    Par défaut Problème ODBC DRIVER
    Bonjour à tous,

    J'utilise PHP pour effectuer des insertions sur un AS400. J'utilise Odbc.
    J'ai un message d'erreur lors de l'exécution de ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL error: [unixODBC][IBM][iSeries Access ODBC Driver]Invalid string or buffer length., SQL state S1090 in SQLExecDirect in var/...
    Voici mon code :

    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
     
    <?php
    $insert_msg = '
    	INSERT INTO biblio.table AS MSG
    		(
                          champ1,
                          champ2,
                          champ3,
                          champ4
    		)
    	VALUES
    		(
    			'.$sujet.',
    			'.$message1.',
    			'.$message2.',
    			'.$message3.'
    		)';
    	$as400_insert_msg = odbc_exec($conn,$insert_msg);	
     
    ?>
    Je ne vois pas d'où vient le problème... Est ce que la syntaxe d'exécution ODBC est bonne ?

    Merci de vos réponses !

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Est-ce qu'on peut voir le texte de la requête qui va être lancée, avec les valeurs des variables ?

    Tatayo.

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 76
    Points : 52
    Points
    52
    Par défaut
    Je récupère les valeurs d'un formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if(isset($_POST['sujet']))      $sujet=$_POST['sujet'];
    else      $sujet="";	
    if(isset($_POST['message1']))      $message1=$_POST['message1'];
    else      $message1="";	
    if(isset($_POST['message2']))      $message2=$_POST['message2'];
    else      $message2="";	
    if(isset($_POST['message3']))      $message3=$_POST['message3'];
    else      $message3="";
    Les champs récupérés sont de type "texte".
    lorsque je fais un echo de toutes mes variables, celle ci s'affichent bien.

    Je ne sais pas si je réponds à ta question ?

  4. #4
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Le type "texte" fait quelle taille avec AS400 ?

    Les variables sont-elles bien de la bonne taille ?

    Si le type "texte" (étrange comme non) correspond au type "text" de SQL Server, peut-être que comme le CLOB (équivalent Oracle), tu doit passer par des fonctions internes pour y accéder.
    On ne jouit bien que de ce qu’on partage.

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 76
    Points : 52
    Points
    52
    Par défaut
    Bon je me suis débrouillé à amener mes variables autrement (à l'aide d'un tableau pour éviter les problèmes d'invalidité etc).

    Bref, au moment de l’exécution j'ai un autre message ODBC :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL error: [unixODBC], SQL state 37000 in SQLExecDirect
    Sur ce site, voici le diagnostic de l'erreur concernée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Syntax error or access violation
    J'ai pourtant bien configurer ma connexion avec un profil admin sur as400.

    Je me dis donc que cela vient de ma syntaxe mais je ne vois vraiment pas d'où ...

    Je vous remets ma requête :

    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
     	$insert_msg = '
    	INSERT INTO BIBLIO.TABLE
    		(
    			MBSUJ,
    			MBMS1,
    			MBMS2,
    			MBMS3,
    			MBMS4,
    			MBMS5,
    			MBBTQ,
    			MBDAT,
    			MBDEV
    		)
    	VALUES
    		(
    			'.$sujet.',
    			'.$lignes[0].',
    			'.$lignes[1].',
    			'.$lignes[2].',
    			'.$lignes[3].',
    			'.$lignes[4].',
    			'.$ID_VRP.',
    			'.$date_msg.',
    			'.$date_msg.'
    		)';
    $as400_insert_msg = odbc_exec($conn,$insert_msg);

  6. #6
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 76
    Points : 52
    Points
    52
    Par défaut
    Pour la 1ère erreur (]Invalid string or buffer length), apparemment il n'aime pas beaucoup les accents ! Un des champs contenait "Réunion" j'ai modifié a "Reunion" et je suis maintenant sur l'erreur 37000.

    J'ajoute qu'il n'y a que sur les requêtes "INSERT INTO" que ça bloque. ça fonctionne très bien sur un SELECT.
    Si ça peut aider ...

    J'ai donc 2 soucis:
    - Gérer les accents
    - Erreur SQL 37000

    Merci

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 76
    Points : 52
    Points
    52
    Par défaut
    Il semblerait que mes erreurs viennent des lignes correspondant au tableau. Voici tout mon code :
    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
    51
    52
    <?php
     
     
     
    if(isset($_POST['sujet']))      $sujet=$_POST['sujet'];
    else      $sujet="";	
     
    $date_msg = date("Ymd");
     
    // On passe le message dans $msg
    $msg=$_POST['msg'];
     
    // On saute une ligne tous les 30 caractères
    $msg_ok = wordwrap($msg, 30, "<br />\n");
     
    // On spécifie que chaque ligne correspondra à une ligne d'un tableau et ceux à chaque retour à la ligne
    $lignes = explode("\n", $msg_ok);
     
    // Pour chaque éléments retournés on va faire une requête
    foreach($_POST['envoi_msg'] as $ID_VRP)
     
    //Connexion As400
    	$server = '192.168.150.1';
    	$dsn = 'as400';  
    	$user = 'fco';
    	$passwd = 'pouet';
    	$conn = odbc_connect($dsn,$user,$passwd);
     
    // Insertion du message dans MS101
     	$insert_msg = "INSERT INTO TEST.MS101P(
    			MBSUJ,
    			MBMS1,
    			MBMS2,
    			MBMS3,
    			MBMS4,
    			MBMS5,
    			MBBTQ,
    			MBDAT,
    			MBDEV) VALUES
    		(
    				'$sujet',
    				'$lignes[0]',
    				'$lignes[1]',
    				'$lignes[2]',
    				'$lignes[3]',
    				'$lignes[4]',
    				'$ID_VRP',
    				'$date_msg',
    				'$date_msg'
    		)";
     
    $as400_insert_msg = odbc_exec($conn,$insert_msg);
    Ce sont ces 5 lignes là qui posent problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    '$lignes[0]',
    				'$lignes[1]',
    				'$lignes[2]',
    				'$lignes[3]',
    				'$lignes[4]',
    L'erreur vient elle de plus haut ou de la requête elle même ?

  8. #8
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 76
    Points : 52
    Points
    52
    Par défaut
    Bon j'ai trouvé !
    En fait je ne cherchais pas au bon endroit. j'ai fait un var_dump($lignes); de mes variables et je me suis aperçu que la 1ère ligne était composée de 34 caractères alors que je le l'avais configuré pour 30.
    L'erreur se trouvait dans le wordwrap, j'ai donc remplacé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $msg_ok = wordwrap($msg, 30,< \br> "\n");
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $msg_ok = wordwrap($msg, 30, "\n");
    Après ça la découpe était ok et l'insertion également.

    Merci pour le var_dump ça m'a permis de tilter sur le nombre de caractères !

    En tout cas merci pour vos réponses.

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

Discussions similaires

  1. Problème Crystal / Driver ODBC v2.0.0.148
    Par TsCyrille dans le forum Connexion aux bases de données
    Réponses: 4
    Dernier message: 21/06/2010, 11h05
  2. [ODBC] Problème de connexion à l'ODBC (driver)
    Par PtitGénie dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 27/04/2010, 12h15
  3. [ODBC] Problème de driver ODBC
    Par al85 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 04/07/2006, 11h17
  4. Réponses: 3
    Dernier message: 12/10/2004, 23h45
  5. [tomcat] [jsp] Problème avec driver OCI pour oracle
    Par nanardcompanie dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 01/07/2004, 09h54

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