0
votes

mysqli_stmt :: bind_param (): variables ne correspond pas au nombre de paramètres

Lorsque j'essaie d'exécuter mon code, je reçois l'erreur: mysqli_stmt :: bind_param (): Nombre de variables ne correspond pas au nombre de paramètres dans la déclaration préparée

mon objectif: extraire des informations de la table de base de données en filtrant une colonne souhaitée et ajoutez-les à un tableau.

J'ai déjà cherché des réponses sur la même erreur, mais les solutions fournies (telles que l'utilisation '?' Sont déjà implémentées)

mon dboperation.php xxx > Et voici mon api.php xxx


3 commentaires

Pourquoi tu liens tous? Vous n'utilisez qu'une entrée utilisateur dans votre clause où la clause utilise donc à la fois dans la liaison


Est-ce que les modifications apportées à Nacho et que vous avez recommandées, cependant, le résultat $ se termine simplement par Faux et et je n'obtiens rien. (Je teste avec "Postman")


Avez-vous déjà défini $ login_Token ? On dirait qu'il devrait être $ _ post ['login_token'] ou $ login_token = $ _post ['login_token'] . (Cela est également hors tension de la poste, vous avez 4 réponse qui a déjà abordé cette question)


3 Réponses :


0
votes

Il vous suffit de lier un paramètre, car vous n'avez qu'un seul espace réservé dans votre requête:

    $stmt->bind_param("s",  $login_token);


1 commentaires

J'ai essayé ceci (aurais dû ajouter le post, désolé). Dans ce cas, le résultat $ vient de finir par Faux et me donne le message "Erreur"



-1
votes

Vous devez vous attaquer avant d'exécuter. Vous êtes contraignant après l'exécution qui ne fonctionne pas.

while($row = $stmt->fetch()) {
    $arr  = array();
    $arr['id'] = $row['id'];
    $arr['first_name'] = $row['first_name'];
    $arr['last_name'] = $row['last_name'];
    $arr['login_token'] = $row['login_token'];
    $arr['time_started'] = $row['time_started'];
    $arr['time_ended'] = $row['time_ended'];
    $arr['todays_worktime'] = $row['todays_worktime'];

    array_push($arrs, $arr);
}


7 commentaires

Cela a-t-il changé et maintenant, j'ai une erreur différente. Il est indiqué que mon identifiant, son nom et tous les autres varuables sont indéfinis.


Ahh, vous avez manqué le $ rangée . Mis à jour, veuillez vérifier maintenant!


Avec cette solution, il dit: Variable non définie: Login_Token; (Celui dans api.php; $ réponse ["ARRS '] = $ DB-> getpersonchanganges_made ($ login_token);)


Êtes-vous sûr de définir $ login_token avant d'appeler $ db-> getpersonchanges_made ($ login_token); ?


MH2K9, je suis ... pas sûr désolé. Je pensais que je n'ai besoin que de faire autant que moi (mises à jour le code dans le message d'origine), j'utilise ensuite simplement Postman pour publier une valeur que je veux tester. En ce moment, il est en quelque sorte de retour d'un tableau vide mais je reçois aussi une erreur en même temps disant que mon login_Token est indéfini (et pointe vers la ligne dans API.PHP $ Response ['ARRS'] = $ DB-> getpersonchangees_made ( $ login_token);


Je vous ai vu des codes et il est clair que vous n'avez pas défini $ login_Token . Et il semble $ login_token provient d'une demande postale. Donc, vous pouvez essayer en changeant la ligne $ réponse ['ARRS'] = $ DB-> getpersonchanges_made ($ login_token); à $ réponse ['getpersonchanganes_made ($ _Post ['login_token']);


Le progrès! En ce moment, je reçois le bon nombre de personnes dans le tableau, mais toutes leurs valeurs sont définies sur NULL (par exemple: "ID": NULL)



-1
votes

Vous voudrez peut-être utiliser bind_result code> après avoir exécuté l'instruction préparée - attribuant les différentes colonnes à mesure que les variables seront ensuite récupérées. L'utilisation de l'espace réservé unique signifie que vous n'avez besoin que de lier une variable comme paramètre d'entrée que déjà mentionné.

function getPersonChanges_made( $login_token=false ){

    $sql='select id, first_name, last_name, login_token, time_started, time_ended, todays_worktime from changes_made where login_token = ?';
    $stmt = $this->con->prepare( $sql );

    if( $stmt && $login_token ){
        $stmt->bind_param('s',$login_token);
        $res=$stmt->execute();

        if( $res ){

            $stmt->store_result();
            $stmt->bind_result( $id, $first_name, $last_name, $login_token, $time_started, $time_ended, $todays_worktime );
            $arrs=[];

            while( $stmt->fetch() ){
                $arr=[];

                $arr['id'] = $id; 
                $arr['first_name'] = $first_name; 
                $arr['last_name'] = $last_name; 
                $arr['login_token'] = $login_token; 
                $arr['time_started'] = $time_started;
                $arr['time_ended'] = $time_ended;
                $arr['todays_worktime'] = $todays_worktime;

                array_push($arrs, $arr);                
            }
            $stmt->free_result();
            $stmt->close();

            return $arrs;
        }
    }
    return false;
}


2 commentaires

Avec cette solution, il dit: Variable non définie: Login_Token; (Celui dans api.php; $ réponse ["ARRS '] = $ DB-> getpersonchanganges_made ($ login_token);)


Dans ce cas, votre code d'origine aurait subi la même erreur?