Adakah "pilih wujud" masih kembali benar dalam fungsi saya?
P粉236743689
P粉236743689 2024-03-28 10:14:58
0
1
410

Saya mengubah suai sedikit fungsi Select Exists yang saya temui pada stackoverflow, tetapi tidak kira apa yang saya cuba, fungsi saya di bawah sentiasa kembali $sqlResulttrue. Walaupun saya hanya menyimpan dua entri dalam pangkalan data. Adakah Select wujud masih sah?

Tiada jawapan yang dicadangkan oleh sistem stackoverflow menjawab soalan saya, sebaliknya mencadangkan menggunakan kaedah yang menyemak bilangan baris yang dikembalikan dan bukannya menggunakan wujud. (Atau pautan yang mereka berikan tidak benar-benar menjelaskan apa yang diwakili oleh hasil yang wujud.)

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

Gunakan: nama pengguna Index varchar(255) utf8_german2_ci

Maaf untuk soalan pemula saya. Entri untuk nama medan ditetapkan sebagai unik.

P粉236743689
P粉236743689

membalas semua(1)
P粉401901266

Anda perlu mendapatkan hasil pertanyaan dengan cara berikut:

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

Ujian dalam talian PHP mysqli

Cara lain ialah mendapatkan bilangan baris yang dikembalikan dan bukannya menggunakan 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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan