首頁  >  問答  >  主體

"select exists"在我的函數中是否仍然回傳true?

我稍微修改了我在stackoverflow上找到的Select Exists函數,但無論我嘗試什麼,我的下面的函數總是返回$sqlResulttrue。即使我在資料庫中只保留了兩個條目。 Select exists還有效嗎?

stackoverflow系統建議的所有答案都沒有回答我的問題,而是建議使用檢查返回行數的方法,而不是使用exists。 (或者他們給出的連結並沒有真正解釋exists結果代表什麼。)

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

使用:username Index varchar(255) utf8_german2_ci

對於我這個初學者的問題,我感到抱歉。 字段名的條目被設定為唯一。

P粉236743689P粉236743689205 天前350

全部回覆(1)我來回復

  • 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

    #

    回覆
    0
  • 取消回覆