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 :

Requête OK dans phpmyadmin mais pas dans mysqli->prepare() [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 12
    Par défaut Requête OK dans phpmyadmin mais pas dans mysqli->prepare()
    EDIT : j'ai trouvé tout seul (en fait il suffisait que je vienne poster pour que j'ai une autre idée de piste de recherche).
    La cause du problème : il me manquait un "$stmt->close()", quelque part plus haut dans le script, provoquant un "Commands out of sync; you can't run this command now".
    La façon dont j'ai trouvé : j'ai remplacé le prepare/bind_param par un query(sprintf()). Il se trouve qu'avec le query, mysqli->error n'est pas vide, ce qui m'a permi de voir immédiatement quel était le problème.

    Reste que je ne sais toujours pas pourquoi mysqli->prepare() ne renseigne jamais mysqli->error :'(

    _________________________________
    Bonjour,

    J'ai un petit problème avec une grosse requête que j'essaie de lancer depuis php avec mysqli.
    -> si je fais un $stmt = $myqli->prepare('marequete'); , j'ai une erreur "Call to a member function bind_param() on a non-object" lorsque j'essaie d'appeler $stmt->bind_param(...). Habituellement j'ai cette erreur si la requête a une erreur de syntaxe.
    -> mais si je copie-colle la requête dans phpmyadmin et que je remplace les arguments à la main, elle fonctionne parfaitement.

    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
     
    $select = ' SELECT Un, Tas, De, Champs
    			FROM tablecentrale
    				LEFT JOIN t2 ON nullable = t2.id
    				INNER JOIN t3 ON champId = t3.id
    				LEFT JOIN t4 ON ...
    				INNER JOIN t5 ON ...
    				INNER JOIN t6 ON ...
    				INNER JOIN t7 ON ...
    				INNER JOIN t8 ON ...
    			WHERE 1=1
    				AND colonnedeT5 = ?
    				AND tablecentrale.deleteLogique IS NULL
    				AND NOW() < DATE_ADD(IFNULL(EndDate, DATE_ADD(BeginDate, INTERVAL 2 HOUR)), INTERVAL ? DAY)
    				AND (nullable IS NULL 
    					OR EXISTS(SELECT * FROM t9 WHERE xxx = nullable AND userID = ? ) ) ';
     
    switch($mode) {
    	case 1:
    		$request = $select.'AND monchamp = ?';
     
    		$stmt = $mysqli->prepare($request);
    		$stmt->bind_param('iiii', $bidule, 0,$userid, $monchamp);
    		break;
    	// TODO faire les autres cas
    	default :
    		// faire des choses
    }
     
     
    $stmt->execute();
    $stmt->store_result();
    $stmt->bind_result($un, $tas, $de, $champs);
    $stmt->fetch();

    Deux bizarreries supplémentaires :
    - selon des modifs que j'ai tenté de faire dans la requête, l'erreur php "Fatal error: Call to a member function bind_param() on a non-object" est parfois surmontée d'un "SCREAM: Error suppression ignored for", chose qui a l'air aléatoire.
    - quoi que je fasse, $mysqli->error est TOUJOURS vide. C'est un problème qui est systématique chez moi.


    Merci,

    Cordialement,

    aze555666

  2. #2
    Membre émérite Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Par défaut
    il me semble que tu doit passer des variables a bind_param (en fait elles sont passé par références)
    $stmt->bind_param('iiii', $bidule, 0,$userid, $monchamp);
    0 n'est pas une variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $stmt->bind_param('iiii', $bidule, $ValZero,$userid, $monchamp);
    $ValZero=0:
    $bidule=1;
    $userid=2;
    $monchamp=3;
    ...
    }
    ...
    $stmt->execute();

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 12
    Par défaut
    Merci de ta réponse. J'ai trouvé la solution entre temps, le problème venait d'un bout de code qui n'était de toute façon pas dans mon message initial.
    Une fois le problème réglé j'ai effectivement eu l'erreur à cause du 0, mais j'ai résolu cette dernière immédiatement.

  4. #4
    Membre émérite Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Par défaut
    n'oubliez pas de mettre le poste en "résolu"

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

Discussions similaires

  1. Requêtes executables dans PostgreSQL mais pas dans Oracle
    Par cogreen dans le forum Langage SQL
    Réponses: 6
    Dernier message: 23/07/2010, 10h32
  2. [MySQL] Résultat dans phpMyAdmin mais pas dans script
    Par dubitoph dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/01/2010, 12h07
  3. Requête OK sous Toad mais pas dans un ksh
    Par agdid04 dans le forum Outils
    Réponses: 2
    Dernier message: 08/10/2008, 16h19
  4. Requête qui passe dans phpmyadmin mais pas en direct
    Par guidav dans le forum Requêtes
    Réponses: 2
    Dernier message: 13/02/2008, 15h00
  5. erreur de requête SQL avec ASP mais pas dans Access
    Par csszzen dans le forum Langage SQL
    Réponses: 6
    Dernier message: 16/03/2007, 09h07

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