我正在尝试为网站构建一个数据库,允许用户在已创建帐户时登录,或创建帐户然后登录。我目前遇到的问题是我只希望将未使用的用户名添加到数据库中,并使用被拒绝的用户名。我的mySQL查询似乎有效,如果userInput不在集合中,则返回空集。目前,如果您输入任何用户名,无论是否使用,都不会让您进入。 以下是我的代码:
if($firstName != null && $address != null)
{
$userCheck =$dbh->query("SELECT userID FROM user WHERE userID='$userInput'");
if(!$userCheck)
{
$sql = "INSERT INTO user(firstName, userID, password, address) VALUES ('$firstName', '$userInput', '$password', '$address')";
$dbh->exec($sql);
is_password_correct($userInput, $password);
}
}
基本上......如果前两个字段填充了我们(或不为空),那么查询将运行,如果是空的,则服务器应该接收信息并允许用户访问该页面。
function is_password_correct($userInput, $password)
{
$dbh = new PDO
$userInput = $_POST["userID"];
$password = $_POST["password"];
$firstName = $_POST["first"];
$rows =$dbh->query("SELECT password FROM user WHERE userID='$userInput' ");
if($rows)
{
foreach ($rows as $row)
{
if($password == $row["password"])
{
return TRUE;
}
}
}
return FALSE;
}
答案 0 :(得分:1)
你应该使用num_rows
,这是Documentation
您还应该在查询中使用引号('$userInput')
更改方式 -
if($firstName != null && $address != null)
{
$userCheck =$dbh->query("SELECT userID FROM user WHERE userID='".$userInput."'");
if($userCheck->num_rows == 0)
{
$sql = "INSERT INTO user(firstName, userID, password, address) VALUES ('".$firstName."', '".$userInput."', '".$password."', '".$address."')";
$dbh->exec($sql);
is_password_correct($userInput, $password);
}
}
你提到你正在使用 pdo 所以rowCount()
是正确使用pdo的东西 -
if($firstName != null && $address != null)
{
$userCheck =$dbh->query("SELECT userID FROM user WHERE userID='".$userInput."'");
$count = $userCheck->rowCount();
if($count == 0)
{
$sql = "INSERT INTO user(firstName, userID, password, address) VALUES ('".$firstName."', '".$userInput."', '".$password."', '".$address."')";
$dbh->exec($sql);
is_password_correct($userInput, $password);
}
}
答案 1 :(得分:0)
$ dhb->查询不会仅返回资源的行计数或布尔值false。所以你必须使用fetchColumn
计算返回资源中的行数。试试这个。
{
$userCheck =$dbh->query("SELECT userID FROM user WHERE userID='".$userInput."'");
$num_rows = $userCheck->fetchColumn;
if($num_rows == 0)
{
$sql = "INSERT INTO user(firstName, userID, password, address) VALUES ('$firstName', '$userInput', '$password', '$address')";
$dbh->exec($sql);
is_password_correct($userInput, $password);
}
}
答案 2 :(得分:-1)
正如Mark Baker所说,尝试这样的事情:
if($firstName != null && $address != null)
{
$userCheck =$dbh->query("SELECT userID FROM user WHERE userID='$userInput'");
if(!mysql_num_rows($userCheck))
{
$sql = "INSERT INTO user(firstName, userID, password, address) VALUES ('$firstName', '$userInput', '$password', '$address')";
$dbh->exec($sql);
is_password_correct($userInput, $password);
}
}