$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.';
}
我试图了解这段代码是如何工作的。这是我到目前为止收集的内容:
变量$resultat
是从查询输出返回的元素数组。如果查询没有任何内容可以返回,那么$resultat
将是一个包含0个元素的数组?
@mysql_fetch_array
返回$resultat
的每一行。它是否正确?
在此之后我迷失了... $ ligne是一种特殊的变量,它包含@mysql_fetch_array
的所有输出?
false!=
如何运作?
我对这个代码块的功能有了大致的了解,即返回已经使用了用户名的消息,但我不确定它是如何实现的。
答案 0 :(得分:3)
不,$resultat
不是数组。它是一个资源,提供对查询结果的访问,如果在执行查询时发生错误,则为false
。
mysql_fetch_array
返回资源的下一行结果,如果没有更多行,则返回false
。如果在调用函数时出错,则@
前缀会抑制PHP可能显示的任何错误。
$ligne
是分配行的变量。该行表示为数组。
expression1 != expression2
比较两个表达式。如果它们不相等,则比较成功,if
执行正文中的语句。在这种情况下,expression1
为false
,expression2
为分配。因此,它将分配给变量的值与false
进行比较。换句话说,如果提取了一行,则会执行$er
分配。
答案 1 :(得分:3)
$resultat
是resource。请参阅mysql_query
手册。@
是error suppression operator。下列mysql_fetch_array
生成的任何错误都将被忽略。mysql_fetch_array
以数组形式返回查询结果的一行。$ligne
是一个常规变量,没什么特别的。它被赋予从mysql_fetch_array
返回的数组。false != (some expression)
与(some expression) != false
相同。 !=
测试type juggling后值不为假。可能会让您感到困惑的是(some expression)
assignment就是这种情况。赋值是指定的值。几点评论:
答案 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)
$resultat
是一个包含mysql结果集的对象,它就像一个数组,但不是。@
用于抑制有关mysql_query的警告消息。 @
很可能放在那里,因为不推荐使用mysql_query
。 mysql_fetch_array
从结果集中返回一行。 if (false != ($ligne = @mysql_fetch_array ($resultat))) {
mysql_fetch_array
的返回值已分配给变量$ligne
。 if(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。
阅读有关mysql_query()的文档 http://www.php.net/manual/en/function.mysql-query.php mysql_query()不返回数组而是返回资源,当没有结果时,处理此资源将返回空结果。阅读2.
阅读有关mysql_fetch_array()的文档 此函数返回下一行,如果没有更多行,则返回false。 @阻止此函数调用的所有PHP错误报告。
$ ligne是一个包含行列的数组,如果您的表中有一个ID列,并且您的查询请求它,您将在此数组中获得一个“ID”键,显然具有相关值。
将结果与false进行比较(在PHP中,0,null,空字符串,'0'被视为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.';
}
答案 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
}
我希望这有帮助!