我最近正在开发一个小项目,我的一个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
请帮忙。提前谢谢。
答案 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。