虚假是怎么回事!=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
的每一行。这是正确的吗@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
赋值$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一样