如何假!!PHP中的X工作?

时间:2013-12-30 22:40:59

标签: php

$ligne是某种保留变量吗? @mysql_fetch_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.';
}

我试图了解这段代码是如何工作的。这是我到目前为止收集的内容:

  1. 变量$resultat是从查询输出返回的元素数组。如果查询没有任何内容可以返回,那么$resultat将是一个包含0个元素的数组?

  2. @mysql_fetch_array返回$resultat的每一行。它是否正确?

  3. 在此之后我迷失了... $ ligne是一种特殊的变量,它包含@mysql_fetch_array的所有输出?

  4. false!=如何运作?

  5. 我对这个代码块的功能有了大致的了解,即返回已经使用了用户名的消息,但我不确定它是如何实现的。

6 个答案:

答案 0 :(得分:3)

  1. 不,$resultat不是数组。它是一个资源,提供对查询结果的访问,如果在执行查询时发生错误,则为false

  2. mysql_fetch_array返回资源的下一行结果,如果没有更多行,则返回false。如果在调用函数时出错,则@前缀会抑制PHP可能显示的任何错误。

  3. $ligne是分配行的变量。该行表示为数组。

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

答案 1 :(得分:3)

  1. $resultatresource。请参阅mysql_query手册。
  2. 这有两个部分:
  3. $ligne是一个常规变量,没什么特别的。它被赋予从mysql_fetch_array返回的数组。
  4. false != (some expression)(some expression) != false相同。 !=测试type juggling后值不为假。可能会让您感到困惑的是(some expression) assignment就是这种情况。赋值是指定的值。
  5. 几点评论:

    • 你可能想要false !== …而不是false !=,这可以确保mysql_fetch_array真正返回false而不是空数组(不应该发生,但谁知道)。在没有类型杂耍的情况下评估!==
    • if (false != (expression)) { … }相当于if (expression) { … }
    • 您的代码使用过时的,已弃用的API(mysql)从PHP访问MySQL数据库。另外两个API(PDOmysqli)可用作替代,mysqli是与旧mysql大致“兼容”(读作“看起来相同”)的API。 1}}。

答案 2 :(得分:2)

  

(1)变量$ resultat是从中返回的元素数组   查询输出。如果查询没有任何内容可以返回,那么$ resultat将会   是一个有0个元素的数组?

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

  

(2)@mysql_fetch_array返回$ resultat的每一行。这是对的吗?

它将返回查询的下一行,作为数组。这里它被调用一次,所以它将返回第一行。使用@不是一个好习惯。

  

(3)在此之后我迷失了...... $ ligne是一种特殊的变量   保存@mysql_fetch_array的所有输出?

分配变量也会返回指定的值。这就像调用$ligne = @mysql_fetch_array($resultat),然后检查$ value!= false。

  

(4)假如何!=工作?

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

答案 3 :(得分:2)

  1. $resultat是一个包含mysql结果集的对象,它就像一个数组,但不是。
  2. @用于抑制有关mysql_query的警告消息。 @很可能放在那里,因为不推荐使用mysql_querymysql_fetch_array从结果集中返回一行。
  3. if (false != ($ligne = @mysql_fetch_array ($resultat))) { mysql_fetch_array的返回值已分配给变量$ligneif(fales !=正在检查$linge的分配是否真实,例如不是空的。

    我已经用更干净的方式编写了代码块。

    <?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.';
      }
    

答案 4 :(得分:2)

它看起来像法国代码......
不推荐使用所有mysql_ *函数,建议使用PDO。

  1. 阅读有关mysql_query()的文档 http://www.php.net/manual/en/function.mysql-query.php mysql_query()不返回数组而是返回资源,当没有结果时,处理此资源将返回空结果。阅读2.

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

  3. $ ligne是一个包含行列的数组,如果您的表中有一个ID列,并且您的查询请求它,您将在此数组中获得一个“ID”键,显然具有相关值。

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

  5. 此代码可以更简单,更高效......

    $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.';
    }
    

答案 5 :(得分:1)

$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
}

我希望这有帮助!