MySQLi Prepared Statement读错了表

时间:2013-04-30 17:48:49

标签: php mysql mysqli

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

Connect.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

请帮忙。提前谢谢。

3 个答案:

答案 0 :(得分:2)

字符串“false”与任何非空字符串一样,在您拥有的任何条件中都会评估为true

执行return false;代替return "false";,我敢打赌它运作正常。

答案 1 :(得分:0)

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

我认为你运行的是错误的代码(旧版本?错误的网址?),这就是为什么你看到没有前缀的表的结果。

答案 2 :(得分:0)

尝试撤消if(num_rows)支票 -

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

这样,只有username = $username正好有一行,并且其他所有内容都返回false时,它才会返回true。