Maison  >  Questions et réponses  >  le corps du texte

Est-ce que « select existe » renvoie toujours vrai dans ma fonction ?

J'ai légèrement modifié la fonction Select Exists que j'ai trouvée sur stackoverflow, mais peu importe ce que j'essaye, ma fonction ci-dessous renvoie toujours $sqlResulttrue. Même si je ne garde que deux entrées dans la base de données. Est-ce que Select existe toujours valide ?

Aucune des réponses suggérées par le système stackoverflow n'a répondu à ma question, suggérant plutôt d'utiliser une méthode qui vérifie le nombre de lignes renvoyées au lieu d'utiliser l'existe. (Ou le lien qu'ils ont donné n'explique pas vraiment ce que représente le résultat existant.)

function uniquedoesexist($dbHandle,$tablename,$fieldname,$value) 
{
    $sql = 'SELECT EXISTS(SELECT * FROM `' . $tablename .
         '` WHERE `'.$fieldname.'` = ? 
            LIMIT 1
    )';
    $stmt = mysqli_prepare($dbHandle, $sql);
    mysqli_stmt_bind_param($stmt, 's',$value);  
    $sqlResult = mysqli_stmt_execute($stmt);

    echo '$sqlResult: ' . $sqlResult.$br;
    return $sqlResult;
}

Utilisation : nom d'utilisateur Index varchar(255) utf8_german2_ci

Désolé pour ma question de débutant. Les entrées pour les noms de champs sont définies pour être uniques.

P粉236743689P粉236743689205 Il y a quelques jours348

répondre à tous(1)je répondrai

  • P粉401901266

    P粉4019012662024-03-29 09:21:29

    Vous devez obtenir les résultats de la requête de la manière suivante :

    function uniquedoesexist($dbHandle, $tablename, $fieldname, $value) {
        $sql = 'SELECT EXISTS(SELECT * FROM `'.$tablename.'` WHERE `'.$fieldname.'` = ? LIMIT 1)';
        $stmt = mysqli_prepare($dbHandle, $sql);
        mysqli_stmt_bind_param($stmt, 's',$value);  
        
        mysqli_stmt_execute($stmt);
        mysqli_stmt_bind_result($stmt, $data);
        mysqli_stmt_fetch($stmt);
    
    
        echo "SqlResult for $value: " . $data . PHP_EOL;
        return $data;
    }

    Test en ligne PHP mysqli

    Une autre façon consiste à obtenir le nombre de lignes renvoyées au lieu d'utiliser SELECT EXISTS :

    <?php
    
        function uniquedoesexist($dbHandle, $tablename, $fieldname, $value) {
            
            $sql = 'SELECT * FROM `'.$tablename.'` WHERE `'.$fieldname.'` = ? LIMIT 1;';
            $stmt = mysqli_prepare($dbHandle, $sql);
            mysqli_stmt_bind_param($stmt, 's',$value);  
            
            mysqli_stmt_execute($stmt);
            mysqli_stmt_store_result($stmt);
            
            $found = mysqli_stmt_num_rows($stmt);
        
        
            echo "SqlResult for $value: " . $found . PHP_EOL;
            return $found;
        }

    PHP mysqli num_rows

    répondre
    0
  • Annulerrépondre