【问题标题】:PHP If / else user exists on database set variable to 0 or 1PHP If / else 用户存在于数据库中,将变量设置为 0 或 1
【发布时间】:2012-07-07 09:38:27
【问题描述】:

我有这段代码来检查用户是否存在于数据库中。如果它退出,我想将$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;}

谢谢

【问题讨论】:

  • 比较字符串时,最好使用strcomp,如下所示:if(strcomp($row['user_name'], $user_name) == 0)
  • @alfasin: === 在这种情况下也足够且更具可读性(related)。
  • @jmdeldin 你说得对!
  • @alfasin,最佳实践,真的吗?我不同意,@jmdeldin 说 === 是一个更好的选择,因为它更具可读性。
  • @therefromhere 你看到我回复的了吗?现在,如果你引用我的话,请尽量准确:我说的是“更好的实践”而不是“最好的”,strcomp 执行一个比“==”更可靠的二进制安全字符串比较。现在,我错了吗?

标签: php mysql if-statement


【解决方案1】:

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

$account = $row['user_name']==$user_name ? 1 : 0;

【讨论】:

  • 您可以将变量放在字符串中,但是为了插入变量,引号必须是双引号。
  • 是的,这就是为什么我说“.. 如果你使用单引号” - 但在这种情况下,任何一个引号都没有意义。
  • 您也可以将结果转换为 int:(int) ($row['user_name'] == $user_name); 但是,如果您确实依赖 PHP 与 ==if ($account) 相等的想法,那么将布尔值显式转换为 int 是'不需要(例如,true == '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。

【讨论】:

    【解决方案3】:

    您的查询返回多行,并且您正在与第一行进行比较。您需要执行以下操作来指定单个用户(请参阅 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"];
    }
    

    【讨论】:

      【解决方案4】:

      变化:

      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"){
      

      【讨论】:

        猜你喜欢
        • 2018-12-26
        • 1970-01-01
        • 2021-12-28
        • 1970-01-01
        • 2015-02-20
        • 2016-06-26
        • 1970-01-01
        • 1970-01-01
        • 2021-09-14
        相关资源
        最近更新 更多