Heim  >  Fragen und Antworten  >  Hauptteil

Gibt „select exist“ in meiner Funktion immer noch „true“ zurück?

Ich habe die Select Exists-Funktion, die ich bei stackoverflow gefunden habe, leicht geändert, aber egal, was ich versuche, meine Funktion unten gibt immer $sqlResulttrue zurück. Auch wenn ich nur zwei Einträge in der Datenbank habe. Ist „Select existiert“ noch gültig?

Keine der vom Stackoverflow-System vorgeschlagenen Antworten beantwortete meine Frage, sondern schlug stattdessen die Verwendung einer Methode vor, die die Anzahl der zurückgegebenen Zeilen überprüft, anstatt vorhanden zu verwenden. (Oder der von ihnen angegebene Link erklärt nicht wirklich, was das vorhandene Ergebnis darstellt.)

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;
}

Verwendung: Benutzername Index varchar(255) utf8_german2_ci

Entschuldigung für meine Anfängerfrage. Einträge für Feldnamen sind eindeutig.

P粉236743689P粉236743689205 Tage vor354

Antworte allen(1)Ich werde antworten

  • P粉401901266

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

    你需要以以下方式获取查询结果:

    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;
    }

    PHP mysqli在线测试

    另一种方式是获取返回行数而不是使用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

    Antwort
    0
  • StornierenAntwort