Est-ce que « select existe » renvoie toujours vrai dans ma fonction ?
P粉236743689
P粉236743689 2024-03-28 10:14:58
0
1
391

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粉236743689
P粉236743689

répondre à tous(1)
P粉401901266

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal