-1

我最近在做一个小项目,我的一个 PHP 函数检查用户名是否存在并且它有效,但它读取了错误的表。我希望它读取 todo_users 并读取 users 表。这是我的代码:

连接.php

class Connect
{
    public $sqlHost='MySQLHost';
    public $sqlUser='MySQLUser';
    public $sqlPass='MySQLPass';
    public $sqlDB='MySQLDB';
    public $tablePrefix='todo';

    public function connect(){
        return new mysqli($this->sqlHost, $this->sqlUser, $this->sqlPass, $this->sqlDB);
    }
}

注意:出于明显的安全原因,我已经替换了 sql 变量。

功能:

public static function exists($username) {
    $connect = new Connect();
    $c = $connect->connect();
    $t = $connect->tablePrefix."_users";
    $stmt = $c->prepare("SELECT username FROM `".$t."` WHERE username = ?");
    $stmt->bind_param("s", $username);
    $stmt->execute();
    $stmt->store_result();
    $num_row = $stmt->num_rows;
    $stmt->bind_result($result);
    if($num_row === 0) {
        return "false";
    } else {
        return "true";
    }
    $stmt->close();
    $c->close();
}

checkuser.php 函数被调用的地方:

 require_once("userfunc.php");
 if(isset($_POST["user"]))
 {
    $username = $_POST["user"];
    if(USERFUNC::exists($username)) {
        echo "YES";
    } else {
        echo "NO";
    }
 }

编辑:我使用的版本是:PHP 版本 5.3.18 MySQL 版本 5.1.68

请帮忙。提前致谢。

4

3 回答 3

2

字符串" false" 与任何非空字符串一样,将像true您拥有的任何条件一样进行评估。

return false;而不是,return "false";我敢打赌它工作正常。

于 2013-04-30T18:17:16.410 回答
0

尝试撤销您的if(num_rows)支票 -

if($num_row === 1) {  // or $num_row == 1
        return "true";
    } else {
        return "false";
    }

这样它只会在恰好有 1 行的情况下返回 true,username = $username而其他所有内容都将返回 false。

于 2013-04-30T18:06:08.537 回答
0

您粘贴的代码是不可能的。

我认为您正在运行错误的代码(旧版本?错误的 url?),这就是为什么您从没有前缀的表中看到结果。

于 2013-04-30T17:56:14.007 回答