"select exists"在我的函数中是否仍然返回true?
P粉236743689
P粉236743689 2024-03-28 10:14:58
0
1
355

我稍微修改了我在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粉236743689
P粉236743689

全部回复(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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!