1

我有这段代码来检查用户是否存在于数据库中。我想分配$account1是否退出,0如果没有。我认为这段代码会起作用,但它会不断设置$account0所以我认为我错过了一个技巧。任何帮助,将不胜感激。

$con = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("Couldn't make connection.");

 if (!$con)
 {
 die('Could not connect: ' . mysql_error());
 }

mysql_select_db(DB_NAME, $con);

$sql="SELECT user_name FROM users";

$result = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_assoc($result);
if ($row['user_name'] == '$user_name'){
$account = 1;
}else{
        $account = 0;}

谢谢

4

4 回答 4

3

如果使用单引号,则不能将变量放在字符串中'(而且这不是必需的!)。下面纠正了该问题,并将您的 if/else 语句缩短为单行。

$account = $row['user_name']==$user_name ? 1 : 0;
于 2012-07-06T22:33:56.147 回答
2

我认为这可以做得更好:

$con = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("Couldn't make connection.");

 if (!$con)
 {
 die('Could not connect: ' . mysql_error());
 }

mysql_select_db(DB_NAME, $con);

$account = (int)mysql_query("SELECT COUNT(*) FROM Users WHERE user_name='$user_name'");

这应该在帐户中存储正确的值,即如果找到用户则为 1,否则为 0。

于 2012-07-06T22:40:58.940 回答
1

您正在查询返回多行,并且您正在与第一行进行比较。您需要执行以下操作来指定单个用户(请参阅 sql 语句更改):

$sql="SELECT user_name FROM users WHERE user_name='".$user_name."' ";

$result = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_assoc($result);
if ($row['user_name'] == '$user_name'){
$account = 1;
}else{
        $account = 0;}

此外,要遍历行,您可以从http://php.net/manual/en/function.mysql-fetch-assoc.php看到这个示例:

while ($row = mysql_fetch_assoc($result)) {
    echo $row["userid"];
    echo $row["fullname"];
    echo $row["userstatus"];
}
于 2012-07-06T22:38:32.920 回答
1

改变:

if ($row['user_name'] == '$user_name'){

到:

if ($row['user_name'] == $user_name){

单引号表示一个字符串。因此,通过将变量放在单引号之间,您试图匹配$row['user_name']$user_name不是 $user_name 变量中的字符串 - 而是 STRING "$user_name")。

双引号也表示字符串,但您可以将变量放在双引号之间并$row['user_name']匹配$user_name(变量内的字符串)。

因此,以下两个示例是正确的,而您的则不是:

if ($row['user_name'] == $user_name){
if ($row['user_name'] == "$user_name"){
于 2012-07-06T22:43:09.803 回答