我有这段代码来检查用户是否存在于数据库中。如果退出,我想将$account
分配给1
,如果不退出则分配0
。我认为这段代码可以正常工作,但它会不断设置$account
到0
,所以我觉得我错过了一个技巧。任何帮助将不胜感激。
$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;}
由于
答案 0 :(得分:3)
如果使用单引号'
,则不能将变量放在字符串中(加上它不是必需的!)。下面纠正了这个问题,并将你的if / else语句缩短为一行。
$account = $row['user_name']==$user_name ? 1 : 0;
答案 1 :(得分: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。
答案 2 :(得分: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"];
}
答案 3 :(得分: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"){