Gibt „select exist' in meiner Funktion immer noch „true' zurück?
P粉236743689
P粉236743689 2024-03-28 10:14:58
0
1
416

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

Antworte allen(1)
P粉401901266

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

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

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage