Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
虚假是怎么回事!=PHP工作中的X?_Php - Fatal编程技术网

虚假是怎么回事!=PHP工作中的X?

虚假是怎么回事!=PHP工作中的X?,php,Php,$ligne是某种保留变量吗?@mysql\u fetch\u array真正做什么 $resultat = mysql_query("SELECT * FROM temp_users WHERE username ='".$username."'"); if (false != ($ligne = @mysql_fetch_array ($resultat))) { $er.='This username ('.$username.') is already taken.'; }

$ligne
是某种保留变量吗?
@mysql\u fetch\u array
真正做什么

$resultat = mysql_query("SELECT * FROM temp_users WHERE username ='".$username."'");

if (false != ($ligne = @mysql_fetch_array ($resultat))) {
    $er.='This username ('.$username.') is already taken.';
}
我试图理解这段代码是如何工作的。到目前为止,我收集了以下信息:

  • 变量
    $resultat
    是从查询输出返回的元素数组。如果查询没有要返回的内容,那么
    $resultat
    将是一个包含0个元素的数组

  • @mysql\u fetch\u array
    返回
    $resultat
    的每一行。这是正确的吗

  • 在这之后我迷路了。。。$ligne是一种特殊的变量,它保存
    @mysql\u fetch\u数组的所有输出

  • 怎么会出错=工作

  • 我大致了解了这个代码块的作用,即返回一个用户名已被占用的消息,但我不确定它是如何实现的

    $resultat = mysql_query("SELECT * FROM temp_users WHERE username ='".$username."'");
    
    //This queries the database to see if the username the user entered exists already
    
    if (false != ($ligne = @mysql_fetch_array ($resultat))) {
    
    //the if statement checks to see if the statement doesn't equal false. Essentially, it checks if the statement is true. I don't know what $ligne is, we need more information. It seems like an empty variable designed to hold the results.
    
        $er.='This username ('.$username.') is already taken.';
    
    //This appends 'This username ('.$username.') is already taken.' to the variable $er
    }
    
    我希望这有帮助

  • 否,
    $resultat
    不是数组。它是一种资源,提供对查询结果的访问,如果执行查询时发生错误,则提供对查询结果的访问


  • mysql\u fetch\u array
    返回资源中的下一行结果,如果没有更多行,则返回
    false
    @
    前缀禁止在调用函数时出错时PHP可能显示的任何错误

  • $ligne
    是分配给行的变量。该行表示为一个数组

  • expression1!=expression2
    比较这两个表达式。如果它们不相等,则比较成功,
    If
    执行正文中的语句。在这种情况下,
    expression1
    false
    ,而
    expression2
    是赋值。因此,它将分配给变量的值与
    false
    进行比较。换句话说,如果提取了一行,将执行
    $er
    赋值

  • (1) 变量$resultat是从 查询输出。如果查询没有要返回的内容,则$resultat将 是否是包含0个元素的数组

    否,它包含对查询结果的引用

    (2) @mysql\u fetch\u数组返回$resultat的每一行。这是正确的吗

    它将以数组的形式返回查询的下一行。这里只调用一次,所以它将返回第一行。使用@不是一个好的做法

    (3) 在这之后我迷路了。。。$ligne是一种特殊的变量吗 保存@mysql\u fetch\u数组的所有输出

    分配变量也会返回分配的值。这就像调用
    $ligne=@mysql\u fetch\u array($resultat)
    ,然后检查$value!=错

    (4) 虚假是怎么回事!=工作

    false!=$foo
    相当于
    $foo!=错误
    (但不太直观)

  • $resultat
    是一个包含mysql结果集的对象,该结果集类似于数组,但不是数组

  • @
    用于抑制有关mysql\u查询的警告消息
    @
    最有可能放在那里,因为不建议使用
    mysql\u query
    mysql\u fetch\u array
    从结果集中返回一行
  • if(false!=($ligne=@mysql\u fetch\u array($resultat)){

    mysql\u fetch\u array
    的返回值被分配给变量
    $ligne
    if(fales!=
    正在检查
    $linge
    的分配是否真实,例如不为null

    我已经以更简洁的方式编写了您的代码块

    <?php
      $er = '';
      $resultat = mysql_query("SELECT * FROM temp_users WHERE username ='".$username."'");
    
      while($ligne = mysql_fetch_array ($resultat) ) {
        $er.='This username ('.$username.') is already taken.';
      }
    
    
    
  • $resultat
    是一个。请参阅手册
  • 这包括两部分:

    • @
      是。以下
      mysql\u fetch\u数组生成的任何错误都将被忽略
    • 将查询结果的一行作为数组返回

  • $ligne
    是一个正则变量,没有什么特别的。它被分配从
    mysql\u fetch\u array
    返回的数组
  • false!=(某个表达式)
    (某个表达式)!=false
    相同。之后测试该值是否为false。可能会让您困惑的是
    (某个表达式)
    就是这种情况。赋值的值就是被赋值的值
  • 再多说几句:


    • 您可能希望
      false!==…
      而不是
      false!=
      ,这可以确保
      mysql\u fetch\u array
      真正返回
      false
      ,而不是空数组(这不应该发生,但谁知道呢)。
      !=
      的计算不需要进行类型转换
    • if(false!=(expression)){…}
      相当于
      if(expression){…}
    • 您的代码使用一个过时的、不推荐使用的API()从PHP访问MySQL数据库。另外两个API(和)可以替代,
      mysqli
      是设计为与旧的
      MySQL
      基本“兼容”(读“看起来一样”)的API

    它看起来像一个法语代码…
    所有mysql_*函数都已弃用,建议使用PDO

  • 阅读关于mysql_query()的文档 mysql_query()不返回数组,而是返回一个资源,当没有结果时,处理此资源将返回一个空结果。阅读2

  • 阅读关于mysql_fetch_array()的文档 此函数返回下一行,如果没有更多行,则返回false。 @防止此函数调用的所有PHP错误报告

  • $ligne是一个包含行的列的数组,如果您的表中有一个ID列,并且如果您的查询请求它,那么您将在该数组中获得一个“ID”键,该键显然带有关联的值

  • 将结果与false进行比较(在PHP中,0,null,空字符串“0”被视为false)。通过这种方式将结果与false进行比较确实“愚蠢”,但这是一个常见的错误

  • 此代码可以更简单、更高效

    $resultat = mysql_query("SELECT username FROM temp_users WHERE username LIKE '".$username."' LIMIT 1") or die("MySQL Error: ".mysql_error());
    if( mysql_num_rows($resultat) ) {
        $er.='This username ('.$username.') is already taken.';
    }
    

    就像有人写c一样